Jeśli mam typ transformatora monada biorąc dwa argumenty typu, można użyć liftM
do podnoszenia wartości do przekształconej monady:Jak korzystać Scalaz 7 za EitherT z liftM
scala> val o = 1.point[List].liftM[OptionT]
o: scalaz.OptionT[List,Int] = OptionT(List(Some(1)))
Jednakże jeśli próbuję samo z EitherT
wydaje się, że muszę użyć aliasu typu (lub typu 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]
Jaki jest właściwy sposób to zrobić? Idealnie wnioskowanie o typie argumentu dla liftM
przy użyciu oczekiwanego typu wyrażenia (coś takiego jak val blah: EitherT[List, String, Int] = 1.point[List].liftM
).