我想知道 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 回答