Scala是否真的是Monad

时间:2014-11-24 09:02:26

标签: scala monads either

我想知道scala Either在类别理论意义上是否真的是Monad?我知道Monads应该有bindreturn方法。什么是Either的{​​{1}}呢?

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法则。