我有Either[Future[A], Future[B]]
的实例,我想将其转换为Future[Either[A, B]]
。
自my previous question,cats 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的版本
答案 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