难以辨认的符号,有些人声称它们有着真正的意义。
包含什么?
导入Runes引入了几种新的操作符和一个全局函数,它们对应于常见的Haskell类型类
Functor
<^>
(发音为“map”)
Applicative Functor
<*>
(发音为“apply”)<
(发音为“左顺序”)>
(发音为“右顺序”)pure
(发音为“纯”)
Alternative
<|>
(发音为“交替”)empty
(发音为“空的”)
莫纳德
>>-
(发音为“flatMap”)(左结合)-<<
(发音为“flatMap”)(右结合)>->
(发音为“莫纳德组合”)(左结合)<-<
(发音为“莫纳德组合”)(右结合)
实现
我们还提供了Optional和Array的默认实现,具体类型签名如下
// Optional+Functor:
public func <^> <T, U>(f: T -> U, x: T?) -> U?
// Optional+Applicative:
public func <*> <T, U>(f: (T -> U)?, x: T?) -> U?
public func <* <T, U>(lhs: T?, rhs: U?) -> T?
public func *> <T, U>(lhs: T?, rhs: U?) -> U?
public func pure<T>(x: T) -> T?
// Optional+Alternative:
public func <|> <T>(lhs: T?, rhs: T?) -> T?
public func empty<T>() -> T?
// Optional+Monad:
public func >>- <T, U>(x: T?, f: T -> U?) -> U?
public func -<< <T, U>(f: T -> U?, x: T?) -> U?
public func >-> <T, U, V>(f: T -> U?, g: U -> V?) -> T -> V?
public func <-< <T, U, V>(f: U -> V?, g: T -> U?) -> T -> V?
// Array+Functor:
public func <^> <T, U>(f: T -> U, x: [T]) -> [U]
// Array+Applicative:
public func <*> <T, U>(fs: [T -> U], x: [T]) -> [U]
public func <* <T, U>(lhs: [T], rhs: [U]) -> [T]
public func *> <T, U>(lhs: [T], rhs: [U]) -> [U]
public func pure<T>(x: T) -> [T]
// Array+Alternative:
public func <|> <T>(lhs: [T], rhs: [T]) -> [T]
public func empty<T>() -> [T]
// Array+Monad:
public func >>- <T, U>(x: [T], f: T -> [U]) -> [U]
public func -<< <T, U>(f: T -> [U], x: [T]) -> [U]
public func >-> <T, U, V>(f: T -> [U], g: U -> [V]) -> T -> [V]
public func <-< <T, U, V>(f: U -> [V], g: T -> [U]) -> T -> [V]
// Result+Functor:
public func <^> <T, U, E>(f: (T) -> U, a: Result<T, E>) -> Result<U, E>
// Result+Applicative:
public func <*> <T, U, E>(f: Result<(T) -> U, E>, a: Result<T, E>) -> Result<U, E>
public func <* <T, U, E>(lhs: Result<T, E>, rhs: Result<U, E>) -> Result<T, E>
public func *> <T, U, E>(lhs: Result<T, E>, rhs: Result<U, E>) -> Result<U, E>
public func pure<T, E>(_ a: T) -> Result<T, E>
// Result+Alternative:
public func <|> <T, E>(lhs: Result<T, E>, rhs: @autoclosure () -> Result<T, E>) -> Result<T, E>
// Result+Monad:
public func >>- <T, U, E>(a: Result<T, E>, f: (T) -> Result<U, E>) -> Result<U, E>
public func -<< <T, U, E>(f: (T) -> Result<U, E>, a: Result<T, E>) -> Result<U, E>
public func >-> <T, U, V, E>(f: @escaping (T) -> Result<U, E>, g: @escaping (U) -> Result<V, E>) -> (T) -> Result<V, E>
public func <-< <T, U, V, E>(f: @escaping (U) -> Result<V, E>, g: @escaping (T) -> Result<U, E>) -> (T) -> Result<V, E>
贡献
请参阅CONTRIBUTING文件。感谢贡献者!
许可协议
Runes版权所有归thoughtbot, inc.。这是一项免费软件,可以在LICENSE文件中规定的条款下重新分发。
关于
Runes由thoughtbot, inc.维护和资助。thoughtbot的名字和标志是thoughtbot, inc.的商标。
我们热爱开源软件!查看我们的其他项目或查看我们的产品案例研究案例研究和招聘,以帮助构建您的iOS应用程序。