gpt4 book ai didi

scala - 如何将 Future 的分离转换为分离的 Future

转载 作者:行者123 更新时间:2023-12-01 22:59:44 27 4
gpt4 key购买 nike

我有一个方法的结果:val res: Future[Int] Xor Future[String] = getResult(x)
并想对其进行转换并将其用作 Future[Int Xor String]
我无法从 herding cats blog 推断我的用例并且不确定 monad 转换器是否是这里的正确工具,也许是某种形式的 traverse ?
Xor from cat 代表任何分离。 Scalaz \/或标准库 Either也可以(尽管我更喜欢有偏见的分离)。

谢谢

最佳答案

正如 sequence允许你转一个 F[G[A]]G[F[A]]F有一个 Traverse实例和 G适用,bisequence让你转一个F[G[A], G[B]]G[F[A, B]]如果 F有一个 Bitraverse实例(和 G 是适用的)。

Cats 提供了一个 Bitraverse at least a couple of versions 的实现(我在这里使用 0.6.0-M2),所以你可以这样写:

import cats.data.Xor, cats.std.future._, cats.syntax.bitraverse._
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

def flip[A, B](x: Xor[Future[A], Future[B]]): Future[Xor[A, B]] = x.bisequence
Bitraverse有点像Scalaz的 ZipCozip (在另一个答案中提到),但它更通用,因为可以为具有两个类型参数的任何类型构造函数定义实例(假设它具有适当的语义),而不仅仅是元组或析取。

关于scala - 如何将 Future 的分离转换为分离的 Future,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37327257/

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