Как преобразовать либо [будущее[а], будущее[Б]] в будущее[либо[А, Б]]


У меня есть экземпляр Either[Future[A], Future[B]], и я хотел бы преобразовать его в Future[Either[A, B]].

Поскольку мой предыдущий вопрос, cats 0.8.1 был выпущен, изменив структуру библиотеки и отбросив Xor в пользу Either, который является правым смещением в 2.12.

Таким образом, метод, описанный в предыдущем принятом ответе, больше не работает. Я пытался найти подходящий импорт, но потерпел неудачу.
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 8

1 ответ:

Собрали ответы из комментариев для удобства читателя:

1: Вы можете сделать это в простой scala (используя cats.Functor для определения здесь), любезно предоставленный @wheaties & @jean-philippe-pellet

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: cats bisequence отказался компилироваться из-за конфликтующих импортеров: здесь достаточно одного импорта-любезно предоставлено @kolmar

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

3: прочитайте руководство по импорту кошек , чтобы избежать этой проблемы в будущем-любезность @peter-neyens