Si tengo un tipo de transformador mónada tomar dos argumentos de tipo, puedo usar liftM
para levantar los valores en la mónada transformado:Cómo utilizar EitherT de Scalaz 7 con liftM
scala> val o = 1.point[List].liftM[OptionT]
o: scalaz.OptionT[List,Int] = OptionT(List(Some(1)))
Sin embargo si intento lo mismo con EitherT
parece que debo usar un alias de tipo (o un tipo lambda):
scala> val e = 1.point[List].liftM[({type l[a[+_],b] = EitherT[a, String, b]})#l]
e: scalaz.EitherT[List,java.lang.String,Int] = [email protected]
¿Cuál es la forma correcta de hacer esto? Lo ideal es inferir el argumento de tipo para liftM
usando el tipo esperado de la expresión (algo así como val blah: EitherT[List, String, Int] = 1.point[List].liftM
).