gpt4 book ai didi

scala - 如何将 Scalaz 7's EachT 与 LiftM 结合使用

转载 作者:行者123 更新时间:2023-12-03 15:46:51 27 4
gpt4 key购买 nike

如果我有一个采用两个类型参数的 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

这样做的正确方法是什么?理想情况下推断 liftM 的类型参数使用表达式的预期类型(类似于 val blah: EitherT[List, String, Int] = 1.point[List].liftM )。

最佳答案

一般来说,似乎没有更好的方法来处理多参数类型构造函数,但在 EitherT 的特定情况下,我们可以使用 EitherT.right :

scala> val o: EitherT[List, String, Int] = EitherT.right(1.point[List])
o: scalaz.EitherT[List,String,Int] = scalaz.EitherTFunctions$$anon$14@12fa8880

关于scala - 如何将 Scalaz 7's EachT 与 LiftM 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12853879/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com