func f1<
  X,
  Y: A,
  // documentation
  Z: B & C<D>
>() where X == Y, Y: A, Z: B & C<D> { }

func < <T>() { }

func f2(_ p: @escaping () throws -> Void) rethrows -> some Collection { }

func f3(
  p1e p1i: inout Int = 5,
  _ p2: (x: Int, y: Int),
  p3: (var: Int, let: Int) throws -> Int,
  p4: Int...
  p5: @attribute String? = "text"
) { }

init<X: A>(_ p: @attribute inout (x: Int, var: Int) = (0, 0)) { }
init?(_ p: @attribute inout (x: Int, var: Int) = (0, 0)) { }
init! (_ p: @attribute inout (x: Int, var: Int) = (0, 0)) { }

subscript<X: A>(_ p: @attribute inout (x: Int, var: Int) = (0, 0))  { }

protocol Comparable: Equatable {

  static func < (lhs: Self, rhs: Self) -> Bool
  static func <= (lhs: Self, rhs: Self) -> Bool
  static func > (lhs: Self, rhs: Self) -> Bool
  static func >= (lhs: Self, rhs: Self) -> Bool
}
