verwenden, wenn ich einen Monade Transformatortyp unter zwei Typargumente habe, kann ich liftM
verwenden, um Werte in den transformierten Monade zu heben:Wie Scalaz 7s EitherT mit liftM
scala> val o = 1.point[List].liftM[OptionT]
o: scalaz.OptionT[List,Int] = OptionT(List(Some(1)))
Allerdings, wenn ich die gleiche Sache versuchen, mit EitherT
es scheint, als ob ich eine Art Alias (oder einen Typ Lambda) verwenden müssen:
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]
Was ist der richtige Weg, dies zu tun? Idealerweise leitet man das Argument type für liftM
mit dem erwarteten Typ des Ausdrucks ab (etwa val blah: EitherT[List, String, Int] = 1.point[List].liftM
).