一个例子用例:
def div2(i: Int): Validation[String, Int] =
if (i%2 == 0) Validation.success(i/2)
else Validation.failure("odd")
def div4(i: Int) = for {
a <- div2(i)
b <- div2(a)
} yield b
错误 :无法取消应用类型scalaz.Validation[String,Int]
成种类型构造M[_]
其由类型分类类scalaz.Bind
我猜的错误是由编译器造成无法找到一个Monad
例如Validation[String, Int]
我可以做一个为自己,如:
object Instances {
implicit def validationMonad[E] = new Monad[({type L[A] = Validation[E, A]})#L] {
override def point[A](a: => A) =
Validation.success(a)
override def bind[A, B](fa: Validation[E, A])(f: A => Validation[E, B]) =
fa bind f
}
}
但为什么没有Validation
拥有它了吗? 毕竟, Validation
已经具有bind
定义的方法。
此外,我不能有import Validation._
和import Instances._
在一起了(这花了我looong找出...),因为另一个复杂的 错误 ...
暧昧的隐性价值:像这两个validationMonad
(我的实例),和方法ValidationInstances1
的特质ValidationInstances2
......都匹配了一些Functor of Validation
...
我应该修改scalaz的来源是什么? 或者我完全失去了一些东西〜?
请帮助〜
我使用scalaz 7.0.0-M2