如何将 kleisli 与条件结合起来
How to combine a kleisli with a conditional
给定一个现有的方法 f
def f : Kleisli[Future, Context, Seq[Tip]] = ???
我需要一个根据条件使用 f 的组合器。
这是我当前的实现:
def g(selected: Seq[Tip]) =
if (selected.isEmpty)
f
else
Kleisli[Future, Context, Seq[Tip]] { _ => Future.successful(selected.maxsBy(_.creationDate))}
有没有更好的方法?
(将单个值提升为Kleisli
的部分非常冗长)
如果您正在寻找一种更短的方式将 Seq[Tip]
提升到 Kleisli
:您可以使用 ask
和 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))
您还可以将 Context => Seq[Tip]
转换为您的 Kleisli
:
import scalaz.syntax.std.function1._
((ctx: Context) => selected.maxsBy(_.creationDate)).kleisli[Future]
给定一个现有的方法 f
def f : Kleisli[Future, Context, Seq[Tip]] = ???
我需要一个根据条件使用 f 的组合器。 这是我当前的实现:
def g(selected: Seq[Tip]) =
if (selected.isEmpty)
f
else
Kleisli[Future, Context, Seq[Tip]] { _ => Future.successful(selected.maxsBy(_.creationDate))}
有没有更好的方法?
(将单个值提升为Kleisli
的部分非常冗长)
如果您正在寻找一种更短的方式将 Seq[Tip]
提升到 Kleisli
:您可以使用 ask
和 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))
您还可以将 Context => Seq[Tip]
转换为您的 Kleisli
:
import scalaz.syntax.std.function1._
((ctx: Context) => selected.maxsBy(_.creationDate)).kleisli[Future]