ユースケースの例:
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のソースを変更する必要がありますか?または私は完全に何かが欠けています〜?
助けてください〜
scalaz7.0.0-M2を使用しています