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
}