Учитывая метод
def f[A, B, C](a: A) : Kleisli[Future, B, C] = ???
Мне нужен комбинатор, работающий с Option[A]
Моя первая попытка была:
def g[A, B, C](a: Option[A], default: => C) = a match {
case Some(a) => save(a)
case None => Kleisli[Future, B, C] { _ => Future.successful(default) }
}
Но после прочтения Как комбинировать последовательность Клейсли, я придумал лучший версия:
def g[A, B, C](a: Option[A], default: => C) : Kleisli[Future, B, C] =
a.traverseU(f[A, B, C]).map(_.getOrElse(default))
Любая идея улучшить?
fold
непосредственно наa
и поднятьdefault
вKleisli
для пустой стороны, но вряд ли это будет лучше. - person Travis Brown   schedule 08.04.2016