假设我有一些类型的函数Int => Option[Int]
:
def foo(n: Int): Int => Option[Int] = {x => if (x == n) none else x.some}
val f0 = foo(0)
val f1 = foo(1)
我可以>=>
按如下方式组合它们:
val composed: Int => Option[Int] = Kleisli(f0) >=> Kleisli(f1)
假设现在我需要组合列表中的所有函数:
val fs: List[Int => Option[Int]] = List(0, 1, 2).map(n => foo(n))
我可以用map
and做到这一点reduce
:
val composed: Int => Option[Int] = fs.map(f => Kleisli(f)).reduce(_ >=> _)
它(composed
以上)可以简化吗?