加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读