пример использования:
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