scala - 抽象类型构造函数

标签 scala generics types abstraction type-parameter

我有以下玩具功能:

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]]]或者 OptionList 的任何其他组合?

下面的尝试显然行不通,因为类型不是类型构造函数:

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/

相关文章:

types - golang 类型断言使用 reflect.Typeof()

c++ - 获取 parent 的类型

java - 如何将实现特定接口(interface)的任何类作为参数传递并使用其方法?

Python:chrome.exe 的通用 webbrowser.get().open() 不起作用

scala - Spark如何处理涉及JDBC数据源的故障场景?

json - 如果您有 Reads[T] 和 Writes [T],那么 Format[T] 的目的是什么?

c# - 使用反射将通用列表的实例添加到对象

arrays - 在 Excel 中将类型字符串数组复制到范围 - 限定符无效

java - GregorianCalendar 无法添加 97 天?

scala - 'classOf' 表达式如何在 scala AST 中表示