如何将[未来[A],未来[B]]转换为未来[[A,B]]

时间:2016-12-16 16:09:48

标签: scala applicative either scala-cats

我有Either[Future[A], Future[B]]的实例,我想将其转换为Future[Either[A, B]]

my previous questioncats 0.8.1发布以来,更改了库的结构并放弃Xor,转而使用Either,这在2.12中是正确的。 / p>

因此,先前接受的答案中描述的方法不再起作用。我试图找到合适的进口但失败了。

cats.instances.either._
cats.implicits._ 
cats.syntax.bitraverse._
看起来似乎有道理,但遗憾的是不起作用。编译仍然失败,value bisequence is not a member of Either[scala.concurrent.Future[A],scala.concurrent.Future[‌​B]]

将导入扩展为*.all._并未改变编译器错误。

我在scala 2.11.8上,因为项目所依赖的所有库都没有发布2.12的版本

1 个答案:

答案 0 :(得分:5)

为了方便读者,

编写了评论中的答案:

1:你可以在普通scala中进行(使用cats.Functor进行定义),@ wheaties& @让 - 菲利普-沉淀

def eitherFmap[F[_], A, B](either: Either[F[A], F[B])(implicit F: Functor[F]): F[Either[A, B]] =   
either.fold(f => F.map(f)(Left(_)), f => F.map(f)(Right(_)))

2:由于进口冲突导致猫bisequence拒绝编译:单一导入就足够了 - @kolmar提供

import cats.instances._
...
val futureOfEither = eitherOfFutures.bisequence

3:阅读cats import guide以避免将来出现此问题 - 礼貌@ peter-neyens