scala – 如何处理读者[A,未来[B]]
发布时间:2020-12-16 18:34:25 所属栏目:安全 来源:网络整理
导读:鉴于以下3个功能, def f[A,B] : Reader[A,B] = ???def g[A,B,C](b: B) : Reader[A,Future[C]] = ???def h[A,C,D](c: C) : Reader[A,D] = ??? 如何写一个monadic组合器? 这是我目前的解决方案,但我并不满意所有这些样板 def f2[A,B] : ReaderT[Future,A,B] =
鉴于以下3个功能,
def f[A,B] : Reader[A,B] = ??? def g[A,B,C](b: B) : Reader[A,Future[C]] = ??? def h[A,C,D](c: C) : Reader[A,D] = ??? 如何写一个monadic组合器? 这是我目前的解决方案,但我并不满意所有这些样板 def f2[A,B] : ReaderT[Future,A,B] = kleisli { a => Future.successful(f.run(a)) } def h2[A,D](c: C) : ReaderT[Future,D] = kleisli { a => Future.successful(h(c).run(a)) } def g2[A,C](b: B) : ReaderT[Future,C] = kleisli { a => g(b).run(a) } def i[A,D] : ReaderT[Future,(B,D)] = for { b <- f2[A,B] c <- g2[A,C](b) d <- h2[A,D](c) } yield (b,c,d) 解决方法def i[A,D)] = for { b <- f[A,B].lift[Future] c <- g[A,C](b).mapK[Future,C](identity) d <- h[A,D](c).lift[Future] } yield (b,d) 我不确定是否有更好的方法来替换mapK [Future,C](身份). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |