我想知道 scalaEither是否真的是Monad范畴论意义上的?我知道 Monads 应该有bind和return方法。那是什么Either?bind
1466 次
1 回答
5
是的,它确实是 - 否则它会在 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)
}
}
(实际上它是通过类型类定义的,但上面的定义会起作用)
我想更恰当的说法是,对于 a fixed A,类型({type L[B]=Either[A, B]})#L形成 a Monad,因此它本身Either更像是一个类而Monads不是 a Monad,但这是一个非常技术性的区别。
但它确实是一个Monad;它满足所有单子定律。
于 2014-11-24T09:51:54.860 回答