如何使用Scalaz 7的EitherT与liftM
发布时间:2020-12-16 19:05:07 所属栏目:安全 来源:网络整理
导读:如果我有一个monad变压器类型采取两个类型的参数,我可以使用liftM提升值到变换的monad: scala val o = 1.point[List].liftM[OptionT]o: scalaz.OptionT[List,Int] = OptionT(List(Some(1))) 但是,如果我尝试与EitherT相同的东西,似乎我必须使用类型别名(或
如果我有一个monad变压器类型采取两个类型的参数,我可以使用liftM提升值到变换的monad:
scala> val o = 1.point[List].liftM[OptionT] o: scalaz.OptionT[List,Int] = OptionT(List(Some(1))) 但是,如果我尝试与EitherT相同的东西,似乎我必须使用类型别名(或类型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] = scalaz.EitherTFunctions$$anon$14@3f8905ca 这样做的正确方法是什么?理想地推断使用预期类型的??表达式(类似于val blah:EitherT [List,Int] = 1.point [List] .liftM)的liftM的type参数. 解决方法
一般来说,处理多参数类型构造函数似乎不是一个更好的方法,但在特定情况下,我们可以使用EitherT.right:
scala> val o: EitherT[List,Int] = EitherT.right(1.point[List]) o: scalaz.EitherT[List,Int] = scalaz.EitherTFunctions$$anon$14@12fa8880 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |