2016-12-16 4 views
8

Ich habe eine Instanz von Either[Future[A], Future[B]] und ich möchte es in Future[Either[A, B]] umwandeln.Wie transformiert man entweder [Zukunft [A], Zukunft [B]] in Zukunft [Entweder [A, B]]

Da my previous question, cats 0.8.1 freigegeben worden ist, die die Struktur der Bibliothek verändern und Xor zugunsten der Either fallen, die in 2,12 rechten vorgespannt ist.

So funktioniert die in der vorherigen akzeptierten Antwort beschriebene Methode nicht mehr. Ich habe versucht, die passenden Importe zu finden, aber gescheitert.

cats.instances.either._ 
cats.implicits._ 
cats.syntax.bitraverse._ 

sah plausibel aus, funktioniert aber leider nicht. Kompilierung schlägt immer noch fehl mit value bisequence is not a member of Either[scala.concurrent.Future[A],scala.concurrent.Future[‌​B]]

Erweiterung der Importe zu *.all._ änderte den Compiler-Fehler nicht.

Ich bin auf scala 2.11.8, da nicht alle Bibliotheken das Projekt hängt davon ab, haben für 2.12 eine Version veröffentlicht

+2

'either.fold (_ Karte (. Left (_)), _.map (Right (_))) ', aber wie hängt das mit Katzen zusammen? –

+0

Ich habe dies mit Katzen 0.8.1 und Scala 2.11.8 und 2.12.1 versucht, und "Bisequence" auf "Entweder [Future [A], Future [B]]" funktioniert in beiden Versionen. Haben Sie einen impliziten 'ExecutionContext' im Bereich? Es ist erforderlich für 'Applicative [Future]' – Kolmar

+0

@ Kolmar - Ja, ich importiere einen impliziten 'ExecutionContext'. Das ist komisch, habe das Projekt vor der Kompilierung geputzt. Benutzt du die gleichen 3 Importe, die ich gemacht habe? – kostja

Antwort

4

haben die Antworten aus den Kommentaren für Leser Bequemlichkeit zusammengestellt:

1: Sie können es tun im Klar scala (cats.Functor für die Definition verwenden hier), mit freundlicher Genehmigung von @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: Katzen bisequence weigerte sich aufgrund widersprüchlicher zu kompilieren Importe: ein einziger Import ist hier genug - mit freundlicher Genehmigung von @kolmar

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

3: die cats import guide lesen das Problem in Zukunft zu vermeiden - mit freundlicher Genehmigung @ Peter-Neyens

Verwandte Themen