swift Swift&Monads

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift Swift&Monads相关的知识,希望对你有一定的参考价值。

// Make Optional a monad
extension Optional {
    // Scala style, define `flatMap` directly
    func flatMap<U>(f: (a: T) -> Optional<U>) -> Optional<U> {
        switch (self) {
            case .None: return nil
            case .Some(let value): return f(a: value)
        }
    }

    // Haskell style, define `join` and use existing `map` implementation (`fmap` in Haskell terms)
    static func join<U>(s: Optional<Optional<U>>) -> Optional<U> {
        switch (s) {
            case .None: return nil;
            case .Some(let value): return value;
        }
    }

    func bind<U>(f: (a: T) -> Optional<U>) -> Optional<U> {
        return Optional.join(self.map(f))
    }
}

以上是关于swift Swift&Monads的主要内容,如果未能解决你的问题,请参考以下文章