Wie kettet man Future [\ / [A, B]] in scala?

8

Wie kann ich ein for Verständnis mit den Daten vom Typ Future[\/[String,Int]]

machen?

Hier ist ein Startpunkt, der nicht kompiliert wird.

%Vor%

Hinweis: calculateStuff ist nur ein Beispiel, es wird tatsächlich verschiedene Funktionen geben, die jeweils vom Ergebnis des vorherigen abhängen.

    
Johnny Everson 24.02.2014, 16:02
quelle

1 Antwort

16

Ich sollte zunächst darauf hinweisen, dass ich einen guten Grund habe, eine eigene Fehlerbehandlung (via \/ ) zu implementieren, anstatt die in Future

eingebaute Funktionalität zu verwenden

Wenn dies der Fall ist, dann ist diese Art von Problem genau das, was Monad-Transformatoren sind, wie Ihr Tag es vorschlägt: Umwickeln Sie einfach Ihre Berechnung in EitherT :

%Vor%

Beachten Sie, dass ich die Monad -Instanz für Future von Typelevel verwendet scalaz-contrib Bibliothek.

Jetzt geben computation.run Ihnen Future[String \/ Int] .

Wenn Sie einen reinen Wert in die Berechnung einfügen müssen, können Sie einfach point und einen Typ Lambda:

verwenden %Vor%

Sie könnten auch einen eigenen Typalias definieren, um das Aussehen ein wenig schöner zu machen.

Wenn Sie einen \/ Wert in for -comprehension verwenden möchten, können Sie einfach auf Future zeigen und das Ganze in EitherT :

umbrechen %Vor%

Es ist auch möglich, eine einfache alte Future in die transformierte Monade mit dem (etwas verwirrend benannten) liftM :

zu heben %Vor%

In diesem Fall möchten Sie fast sicher einen Typ-Alias ​​- das Rauschen dieser Zeile ist meistens.

    
Travis Brown 24.02.2014, 16:25
quelle