почему Валидация не является Монадой? (Scalaz7)
пример использования:
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
error: Невозможно отменить вводscalaz.Validation[String,Int]
в конструктор типаM[_]
который классифицируется по типу классаscalaz.Bind
яguess ошибка вызвана тем, что компилятор не может найти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._
вместе больше (это заняло меня, чтобы выяснить ...), из-за другогоcomplicated error...
неоднозначные неявные значения: что-то вроде обоихvalidationMonad
(мой экземпляр) и методValidationInstances1
в чертеValidationInstances2
... оба соответствуют некоторымFunctor of Validation
...
я должен изменить источник скаляза? или я что-то пропустил ~?
пожалуйста, помогите ~
Я использую скалаз 7.0.0-M2