5

我想知道 scalaEither是否真的是Monad范畴论意义上的?我知道 Monads 应该有bindreturn方法。那是什么Eitherbind

4

1 回答 1

5

是的,它确实是 - 否则它会在 scalaz-outlaws 中。Eitherbind定义如下:

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 回答