Scala:类型参数中的问号
Scala: question marks in type parameters
我正在尝试理解以下代码(来自 Scalaz 库):
def kleisliIdApplicative[R]: Applicative[Kleisli[Id, R, ?]] = ...
我假设 T[P0, ?]
形式的类型是一个带有参数的类型构造函数。但是我找不到解释类型参数中问号用法的文档。
一个相关的问题是问号和下划线有什么区别?
有没有一个地方可以很好地记录所有这些?
问号语法来自名为 kind-projector.
的编译器插件
您可以在此处看到它包含在 scalaz 构建中:https://github.com/scalaz/scalaz/blob/series/7.3.x/project/build.scala#L310
插件翻译
Kleisli[Id, R, ?]
进入(大致)
({type L[A] = Kleisli[Id, R, A]})#L
这是表达类型 lambda 的一种相当复杂的方式(但不幸的是,这是 Scala 中的唯一方式),即部分应用的类型构造函数。
我正在尝试理解以下代码(来自 Scalaz 库):
def kleisliIdApplicative[R]: Applicative[Kleisli[Id, R, ?]] = ...
我假设 T[P0, ?]
形式的类型是一个带有参数的类型构造函数。但是我找不到解释类型参数中问号用法的文档。
一个相关的问题是问号和下划线有什么区别?
有没有一个地方可以很好地记录所有这些?
问号语法来自名为 kind-projector.
的编译器插件您可以在此处看到它包含在 scalaz 构建中:https://github.com/scalaz/scalaz/blob/series/7.3.x/project/build.scala#L310
插件翻译
Kleisli[Id, R, ?]
进入(大致)
({type L[A] = Kleisli[Id, R, A]})#L
这是表达类型 lambda 的一种相当复杂的方式(但不幸的是,这是 Scala 中的唯一方式),即部分应用的类型构造函数。