【发布时间】:2015-07-13 09:25:39
【问题描述】:
假设我有几个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 和reduce 做到这一点:
val composed: Int => Option[Int] = fs.map(f => Kleisli(f)).reduce(_ >=> _)
可以简化(上面的composed)吗?
【问题讨论】:
标签: scala monads scalaz kleisli