我有以下玩具功能:
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 - 抽象类型构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10107378/