我有如下代码:
type StringValidation[+A] = Validation[String, A]
type WriterValidation[A] = WriterT[StringValidation, String, A]
type Result[A] = WriterValidation[A]
private def someResult: Result[Int]
def implementTrait: Result[Any] = someResult // type mismatch
它给出了 type mismatch, found Result[Int]
, required Result[Any]
,但是如果我将其更改为:
type WriterValidation[+A] = WriterT[StringValidation, String, A]
它给出“协变类型 A 出现在 WriterT 中的不变位置......”
在我看来,操作在概念上应该没问题,Validation
可以是协方差,为什么WriterT
不能(或不)decared WriterT[F[_], W, +A]
(或什至+W
)?
我正在使用 scalaz7 快照,但我看到 6.0.4 中 WriterT 的声明是相同的。
解决了。
原来是我用错了版本,我用的是"org.scalaz" %% "scalaz-core" % "7.0-SNAPSHOT"
,换了"org.scalaz" % "scalaz-core_2.9.2" % "7.0.0-M2"
就ok了