Wie kann ich ein for
Verständnis mit den Daten vom Typ Future[\/[String,Int]]
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.
Ich sollte zunächst darauf hinweisen, dass ich einen guten Grund habe, eine eigene Fehlerbehandlung (via \/
) zu implementieren, anstatt die in Future
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
:
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:
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
:
Es ist auch möglich, eine einfache alte Future
in die transformierte Monade mit dem (etwas verwirrend benannten) liftM
:
In diesem Fall möchten Sie fast sicher einen Typ-Alias - das Rauschen dieser Zeile ist meistens.
Tags und Links scala scalaz monad-transformers