我想知道scala Either
在类别理论意义上是否真的是Monad
?我知道Monads应该有bind
和return
方法。什么是Either
的{{1}}呢?
答案 0 :(得分:3)
是的,确实如此 - 否则就会出现在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
,类型({type L[B]=Either[A, B]})#L
形成Monad
,因此Either
更像是一类Monads
本身比Monad
Monad
,但这是一种非常技术性的区别。
但它确实是{{1}};它符合所有monad法则。