scala – 抽象类型构造函数

我有以下玩具功能:

def test[T](x: Option[List[Option[T]]])
{
    for (a <- x; b <- a; c <- b) println(c)
    println("----------")
}

如何概括上述功能,以便它也适用于Option [Option [Option [T]]]或List [List [List [T]]]或Option和List的任何其他组合?

以下尝试显然不起作用,因为类型不是类型构造函数:

def test2[Q,R,S,T](x: Q[R[S[T]]])

在C中,我可能会使用模板模板来实现此目的. Scala有类似的东西吗?

最佳答案
你能用Scalaz吗?如果是这样,这对于Each类型来说非常简单:

import scalaz._, Scalaz._

def test[Q[_]: Each, R[_]: Each, S[_]: Each, T](x: Q[R[S[T]]]) {
  for (a <- x; b <- a; c <- b) println(c)
  println("----------")
}

转载注明原文:scala – 抽象类型构造函数 - 代码日志