FunctionalSwift 1.6.7

FunctionalSwift 1.6.7

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后一个版本2021年7月
SPM支持 SPM

Alexandr ZalutskiytverdokhlebAlexander Zalutskiisstarzhevskii-mac 维护。



  • Alexander Zalutskiy

YooMoney Functional Swift 库

Functor

通过 T -> U 进行 A -> 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 -> 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 -> 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