EitherSwift 0.1.0

EitherSwift 0.1.0

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2015年4月
SPM支持 SPM

to4iki 维护。



EitherSwift

表示两种可能类型之一的值(一个不相交的联合。)
Either 的实例要么是 Left 的一个实例,要么是 Right 的一个实例。

描述

Swift Either 类型类似于 scala.util.Either
++ \/ - scalaz.\/

决定是否需要 Right Projection

用法

struct Error {
    var reason: String
    init(_ reason: String) { self.reason = reason }
}
let resultL = Either<Error, String>.left(Error("failed"))
let resultR = Either<Error, String>.right("ok")

isLeft / isRight

resultR.isRight // true
resultR.isLeft  // false

swap(~)

~Either<String, String>.left("failed") ?? "fallback" // failed

getOrElse(??)

// Alias for Right Projection.getOrElse
resultL ?? "fallback" // fallback
resultR ?? "fallback" // success

orElse(|||)

// Right Projection
resultL ||| "ok" // .Right("ok")
Either<Error, String>.left(Error("failed1")) ||| resultL ||| resultR // .Right("ok")

map

// Alias for Right Projection.map
resultR.map { "\($0)!" } // .Right("ok!")
resultL.map { "\($0)!" } // .Left(Error("failed"))

flatMap(>>-)

func isFull<T>(string: String) -> Either<T, Bool> {
    return .right(!string.isEmpty)
}

(resultL >>- isFull).fold(
    { e in e.reason},
    { s in s.description }
)
// failed

(resultR >>- isFull).fold(
    { e in e.reason},
    { s in s.description }
)
// true

方法

Either<A, B>

  • 实例方法
    • fold<X>(fa: A -> X, fb: B -> X) -> X
    • swap() -> Either<B, A>
    • getOrElse(or: () -> B) -> B Right Projection
    • orElse(or: () -> B) -> Either<A, B> Right Projection
    • orElse(or: () -> Either<A, B>) -> Either<A, B> Right Projection
    • map<X>(f: B -> X) -> Either<A, X> Right Projection
    • flatMap<X>(f: B -> Either<A, X>) -> Either<A, X> Right Projection

  • 类方法
    • left(value: A) -> Either<A, B>
    • right(value: B) -> Either<A, B>
    • cond<A, B>(test: Bool, right: () -> B, left: () -> A) -> Either<A, B>

LeftProjection<A, B>

  • 实例方法
    • getOrElse(or: () -> A) -> A
    • foreach<U>(f: A -> U)
    • forall(f: A -> Bool) -> Bool
    • exists(f: A -> Bool) -> Bool
    • map<X>(f: A -> X) -> Either<X, B>
    • flatMap<X>(f: A -> Either<X, B>) -> Either<X, B>
    • filter(p: A -> Bool) -> Either<A, B>?
    • toOption() -> A?

RightProjection&A, B>

  • 实例方法
    • getOrElse(or: () -> B) -> B
    • foreach(f: B -> U)
    • forall(f: B -> 布尔) -> 布尔
    • exists(f: B -> 布尔) -> 布尔
    • map(f: B -> X) ->Either
    • flatMap(f: B -> Either
    • filter(p: B -> 布尔) ->Either
    • toOption() -> B?

安装

许可

MIT

作者

to4iki