Functional

重载了几个运算符,了解运算符重载的概念,同时了解在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: A?, f: A->B?)->B? {
    if let x = a {
        return f(x)
    }else {
        return .None
    }
}

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

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

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

    return .None
}

你可能感兴趣的:(Functional)