1

私は次のようなコードを持っています:

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], requiredResult[Any]を返しますが、次のように変更すると:

type WriterValidation[+A] = WriterT[StringValidation, String, A]

「共変型 A は WriterT の不変位置で発生します...」

操作は概念的には問題ないはずであり、Validation共分散である可能性があります。なぜWriterT宣言できなかった(または宣言されていない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"

4

1 に答える 1

2

あなたの状況はよくわかりませんが、scalaz-seven ツリー (および M2 リリース) には共変型 argsがあります。

    sealed trait WriterT[F[+_], +W, +A] { ...

また、次の作品:

    scala> type SV[+A] = Validation[String, A]
defined type alias SV

scala> type WV[+A] = WriterT[SV, String, A]
defined type alias WV

scala> type Result[+A] = WV[A]
defined type alias Result

scala> def someResult: Result[Int] = ???
someResult: Result[Int]

scala> def implementTrait: Result[Any] = someResult
implementTrait: Result[Any]
于 2012-08-22T04:05:47.350 に答える