首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kleisli[未来,上下文,\/]到Kleisli[EitherT,Context,…]

Kleisli[未来,上下文,\/]到Kleisli[EitherT,Context,…]
EN

Stack Overflow用户
提问于 2016-04-12 09:14:21
回答 1查看 372关注 0票数 1

由于我想将工作在长方法( Kleisli )上的Future (可能会导致Either失败)结合在一起,所以我需要叠加效果。下面是在Kleisli中叠加效果的结果代码。有没有一个现有的组合器在斯卡拉兹?

代码语言:javascript
复制
type FutureEitherT[A] = EitherT[Future, String, A]

def toKleisliEitherTFromDisjunction[A](f: Kleisli[Future, Context,String \/ A]) = 
  Kleisli[FutureEitherT, Context, A] { ctx => EitherT(f(ctx)) }

我尝试过f.liftMK[FutureEitherT],但没有成功,但不幸的是,Kleisli类型构造函数中的第三种类型仍然是Either

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-12 10:13:00

你可以用mapK

代码语言:javascript
复制
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scalaz.{\/, EitherT, Kleisli}
import scalaz.std.scalaFuture

type FutureEitherT[A] = EitherT[Future, String, A]

val futureK: Kleisli[Future, Int, String \/ Int] = 
  Kleisli.ask[Future, Int] map (i => \/.right[String, Int](i)))

futureK mapK[FutureEitherT, Int]( EitherT.eitherT )
// scalaz.Kleisli[FutureEitherT,Int,Int] = Kleisli(<function1>)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36568726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档