gor*_*ral 5 monads scala either
我想知道 ScalaEither是否真的是Monad范畴论意义上的?我知道 Monads 应该有bind和return方法。是什么Either的bind呢?
是的,确实如此——否则它就会陷入scalaz-outlaws。Either的bind定义如下:
trait Either[A, B] {
def bind[C](f: B => Either[A, C]) = this match {
case Right(b) => f(b)
case Left(a) => Left(a)
}
}
Run Code Online (Sandbox Code Playgroud)
(实际上它是通过类型类定义的,但上面的定义可以工作)
我想更恰当地说,对于一个 fixed A,类型({type L[B]=Either[A, B]})#L形成 a Monad,因此它本身Either更像是一个类而Monads不是 a Monad,但这是一个非常技术性的区别。
但它确实是一个Monad; 它满足所有的单子法则。