Подтвердить что ты не робот

Как использовать Scalaz 7 EitherT с лифтом

Если у меня есть тип трансформатора монады с двумя аргументами типа, я могу использовать 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).

4b9b3361

Ответ 1

Кажется, что нет лучшего способа обработки конструкторов типа с несколькими аргументами, но в конкретном случае EitherT мы можем использовать EitherT.right:

scala> val o: EitherT[List, String, Int] = EitherT.right(1.point[List])
o: scalaz.EitherT[List,String,Int] = [email protected]