一个示例用例:
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._
validationMonad
ValidationInstances1
ValidationInstances2
Functor of Validation
我应该修改scalaz的来源吗?或者我完全错过了什么~?
请帮忙~
我正在使用 scalaz 7.0.0-M2