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

che*_*hry 2 scala scalaz

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

def f[A,B] = implicitly[EitherT[Option, A, B] === Option[Either[A,B]]] 
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

ste*_*tew 8

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

final case class EitherT[F[_], A, B](run: F[A \/ B])
Run Code Online (Sandbox Code Playgroud)

所以EitherT这里是包装一个Option,而命名run的值是一个类型的值Option[Either[A,B]]