我正在学习Scala中的单子变换器,但是我遇到了一个问题,迄今为止我发现无法解决。在我的单子变换器堆栈中,我组合了Either和State单子。然而,我无法调用属于其中一个单子的函数:
import scalaz._
import Scalaz._
object Minimal {
type Inner[A] = EitherT[Id, String, A]
type Outer[F[+_], A] = StateT[F,Int,A]
type Stack[A] = Outer[Inner, A]
def foo:Stack[Int] = for {
n <- get[Int]
} yield {
2 * n
}
def main(args: Array[String]): Unit = {
val x = foo.eval(8)
println(x)
}
}
出现以下错误信息:
[error] Minimal.scala:10: type mismatch;
[error] found : scalaz.IndexedStateT[scalaz.Id.Id,Int,Int,Int]
[error] required: Minimal.Stack[Int]
[error] (which expands to) scalaz.IndexedStateT[Minimal.Inner,Int,Int,Int]
[error] n <- get[Int]
如果我把单子变换器栈更改为:
type Stack[A] = State[Int,A]
该程序能够编译和运行,但是我不知道哪里出了问题。