10
如果我有一個單子轉換型採用兩個類型參數,我可以用liftM
解除值到轉化單子:如何使用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]
什麼是做到這一點的正確方法?理想情況下,使用預期的表達式類型(如val blah: EitherT[List, String, Int] = 1.point[List].liftM
)來推斷liftM
的類型參數。