YooMoney Functional Swift 库
Functor
通过 T -> U
进行 A
的转换
let ƒ: (T) -> U
let a: T? = T()
let b: U? = ƒ <^> a
let c: U? = U() <^ a
let d: U? = a ^> U()
Applicative
Applicative 是一个包装器,可以将包装的函数应用于包装的值。
Applicative 通过 A<(T) -> U>
将 A
转换
let ƒ: Optional<(T) -> U>
let a: T? = T()
let b: U? = ƒ <*> a
Applicative 还具有几个辅助函数,用于将函数应用于多个参数的包装参数
liftA2: ((T, U) -> V, A<T>, A<U>) -> A<V>
liftA3: ((T, U, V) -> W, A<T>, A<U>, A<V>) -> A<W>
Monad
通过 T -> A
进行 A
的转换
let ƒ: (T) -> U?
let a: T? = T()
let b: U? = ƒ -<< a
let c: U? = a >>- ƒ
幺半群
可组合的类型
struct Sum {
let number: Integer
init(_ number: Integer) {
self.number = number
}
}
extension Sum: Monoid {
static func mempty() -> Sum {
return Sum(0)
}
func mappend(_ monoid: Sum) -> Sum {
return Sum(number + monoid.number)
}
}
let numbers = [5, 8, 9, 0, 1, 7, 8]
let sum = numbers.map(Sum.init).mconcat().number // = 38