Functional

2016-03-06  本文已影响6人  幸运的小强本人

重载了几个运算符,了解运算符重载的概念,同时了解在JSON 处理中的一些逻辑:

infix operator >>> {
  // bind
  associativity left precedence 150
}

infix operator <^> {
  // Functor's fmap(usually <$>)
  associativity left
}

infix operator <*> {
  // Applicative's apply
  associativity left
}

func >>><A, B>(a: A?, f: A->B?)->B? {
    if let x = a {
        return f(x)
    }else {
        return .None
    }
}

func >>><A, B>(a:Result<A>, f:A-> Result<B>)->Result<B> {
    switch a {
        case let .Value(x): return f(x.value)
        case let .Error(error): return .Error(error)
    }
}

func <^><A, B>(f: A->B, a: A?)->B? {
    if let x = a {
        return f(x)
    }else {
        return .None
    }
}

func <*><A, B>(f:(A->B)?, a: A?)->B? {
    if let x = a {
        if let fx = f {
            return fx(x)
        }
    }

    return .None
}
上一篇下一篇

猜你喜欢

热点阅读