【发布时间】:2013-12-18 01:21:25
【问题描述】:
Scala 或 Scalaz 中是否存在实用程序来将函数容器/集合转换为从相同输入映射到集合输出值的函数?签名看起来像
def transform[M[_], A, B](m: M[A => B]): A => M[B] = ???
这是 List 容器的示例实现:
def transform[A, B](fs: List[A => B]): A => List[B] = x =>
fs.foldRight[List[B]](Nil) {
(f, acc) => f(x) :: acc
}
理想情况下,这适用于任何函数容器,包括函数元组、Option[Function1[A, B]],甚至是TupleN[Option[Function1[A, B]], ...]。
编辑:
我刚刚意识到(至少对于 List 的特殊情况)map 函数有效:
def transform[A, B](fs: List[A => B]): A => List[B] = x => fs map (_(x))
这可以推广到任何具有适当语义的 map 函数的东西。什么是合适的类型类?
【问题讨论】:
标签: scala functional-programming scalaz