func fix(f: (T -> U) -> T -> U) -> T -> U { return { f(fix(f))($0) } } func const(a: A)(_ b: B) -> A { return a } infix operator >>> { associativity right precedence 170 } func >>> (f: T -> U, g: U -> V) -> T -> V { return { g(f($0)) } }