teoria preestablecida percepcion monadologia monadas monada leibniz espiritual educatina dios conocimiento armonia apeticion scala monads scalaz scalaz7

scala - preestablecida - monadologia leibniz pdf



¿Por qué la validación no es una mónada?(scalaz7) (2)

Como se discutió en el grupo Scalaz, el problema parece ser que ap acumularía errores mientras que la composición (pseudo) monádica solo operaría en la parte de valor de Validation .

Por lo tanto, uno no puede expresarse en términos del otro y, por lo tanto, no existe una instancia de mónada para la Validation .

un caso de uso de ejemplo:

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 : no se puede deshacer la aplicación de tipo scalaz.Validation[String,Int] en un constructor de tipos del tipo M[_] que está clasificado por la clase de tipo scalaz.Bind

Supongo que el error se debe a que el compilador no puede encontrar una instancia de Monad para Validation[String, Int]

Puedo hacer uno para mí, como:

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 } }

pero ¿por qué la Validation ya no lo tiene? después de todo, Validation ya tiene definido el método de vinculación.

Además, no puedo tener import Validation._ e import Instances._ juntas (esto me llevó demasiado tiempo para descubrir ...), debido a otro error complicado ...
valores implícitos ambiguos: algo así como validationMonad (mi instancia), y el método ValidationInstances1 en el atributo ValidationInstances2 ... ambos coinciden con algún Functor of Validation ...

¿Debo modificar la fuente de Scalaz? o me falta algo por completo ~?
por favor ayuda ~

Estoy usando scalaz 7.0.0-M2


El problema es que el funtor aplicativo como está implícito en la mónada no es igual al funtor aplicativo real