概括一种收集方法

时间:2011-03-06 03:14:00

标签: scala collections higher-kinded-types

如果我想将以下方法推广到支持所有必要操作的所有集合类型(foldLeftflatMapmap:+)那么怎么做我做到了吗?目前它只适用于列表。

代码:

def join[A](lists: List[List[A]]): List[List[A]] = {
  lists.foldLeft(List(List[A]())) { case (acc, cur) =>
    for {
      a <- acc
      c <- cur
    } yield a :+ c
  }
}

1 个答案:

答案 0 :(得分:2)

如果您只想对支持:+的集合使用此功能,最简单的方法就是根据Seq而不是List来定义它。

通过使用构建器, 可以使其更加通用,一直到Traversable。我很乐意解释说,当我有更多的时间在我的手上,但它往往会在那个级别变得复杂。

Scalaz applicative functors可能是要走的路,但我会让那些Scalaz经验比我处理那个特定答案的人更多。