根据其他运营商定义自定义运营商?

时间:2015-01-31 14:28:26

标签: swift

作为学习Swift的一种方式,我一直在操场上实现一些功能操作员。我在定义一个合成(<<)和反向合成(>>)运算符时我有多么沮丧,我感到很沮丧,我想知道是否有一种惯用的方法可以做这很快:

infix operator << {associativity right}
func << <T,U,N>(f: N -> U, g: T -> N) -> (T -> U) {
    return { f(g($0)) }
}

我也有翻转功能:

func flip<A, B, T>(f: (A,B) -> T) -> (B, A) -> T {
    return { (b: B, a: A) -> T in return f(a, b) }
}

我想在翻转我的合成运算符方面定义反向合成运算符(>>),但到目前为止我还没有运气。相比之下,这对我来说似乎很难看:

infix operator >> {associativity left}
func >> <T, U, N>(g: T -> N, f: N -> U) -> (T -> U) {
    return f << g
}

0 个答案:

没有答案