2016-04-11 9 views
0

einer bestehenden Methode fWie ein Kleisli mit einer bedingten

def f : Kleisli[Future, Context, Seq[Tip]] = ??? 

Ich brauche eine combinator zu kombinieren Da f in Abhängigkeit von einem bedingten verwenden. Hier ist meine aktuelle impl:

def g(selected: Seq[Tip]) = 
    if (selected.isEmpty) 
     f 
    else 
     Kleisli[Future, Context, Seq[Tip]] { _ => Future.successful(selected.maxsBy(_.creationDate))} 

Gibt es einen besseren Weg?

(der Teil, dass Lift ein einzelner Wert in eine Kleisli recht ausführlich ist)

Antwort

1

Wenn Sie einen kürzeren Weg suchen, um heben Sie den Seq[Tip] in Ihr Kleisli: Sie verwenden können ask und map:

:
import scalaz.Kleisli 
import scalaz.std.scalaFuture._ 
import scala.concurrent.Future 
import scala.concurrent.ExecutionContext.Implicits.global 

Kleisli.ask[Future, Context] map (_ => selected.maxsBy(_.creationDate)) 

Sie können auch ein Context => Seq[Tip] auf Ihre Kleisli konvertieren

+0

Eine andere Lösung: Future (t) .liftKleisli –

Verwandte Themen