gpt4 book ai didi

scala - 如何处理Reader[A, Future[B]]

转载 作者:行者123 更新时间:2023-12-04 21:10:55 25 4
gpt4 key购买 nike

鉴于以下 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] = ???

如何编写一元组合器?

这是我目前的解决方案,但我对所有这些样板并不满意
def f2[A, B] : ReaderT[Future, A, B] = kleisli {
a => Future.successful(f.run(a))
}

def h2[A, C, D](c: C) : ReaderT[Future, A, D] = kleisli {
a => Future.successful(h(c).run(a))
}

def g2[A, B, C](b: B) : ReaderT[Future, A, C] = kleisli {
a => g(b).run(a)
}

def i[A,B,C,D] : ReaderT[Future, A, (B,C,D)] =
for {
b <- f2[A, B]
c <- g2[A, B, C](b)
d <- h2[A, C, D](c)
} yield (b,c,d)

最佳答案

def i[A,B,C,D] : ReaderT[Future, A, (B,C,D)] =
for {
b <- f[A, B].lift[Future]
c <- g[A, B, C](b).mapK[Future, C](identity)
d <- h[A, C, D](c).lift[Future]
} yield (b,c,d)

我不确定是否有更好的方法来替换 mapK[Future, C](identity) .

关于scala - 如何处理Reader[A, Future[B]],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34721465/

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