Если у меня есть тип трансформатора монады с двумя аргументами типа, я могу использовать liftM
, чтобы поднять значения в преобразованную монаду:
scala> val o = 1.point[List].liftM[OptionT]
o: scalaz.OptionT[List,Int] = OptionT(List(Some(1)))
Однако, если я пытаюсь сделать то же самое с EitherT
, мне кажется, что я должен использовать псевдоним типа (или тип лямбда):
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]
Каков правильный способ сделать это? В идеале выведите аргумент типа для liftM
, используя ожидаемый тип выражения (что-то вроде val blah: EitherT[List, String, Int] = 1.point[List].liftM
).