EitherT [Option,A,B] ===选项[A [B,B]]

时间:2015-03-20 05:46:05

标签: scala scalaz

如果我理解正确EitherT[Option,A,B]应该与Option[Either[A,B]]相同,但编译器并不同意。以下代码无法编译:

def f[A,B] = implicitly[EitherT[Option, A, B] === Option[Either[A,B]]] 

我错过了什么?

1 个答案:

答案 0 :(得分:8)

它们是同构的,但不是同一个值。 EitherT[Option,A,B]包含Option[Either[A,B]]类型的值,以便提供不同的行为。我们来看看定义:

final case class EitherT[F[_], A, B](run: F[A \/ B])

所以这里EitherT包装了一个Option,名为run的值是Option[Either[A,B]]

类型的值