Scala:类型参数中的问号

时间:2016-07-27 17:23:15

标签: scala scalaz type-parameter

我试图理解以下代码(来自Scalaz库):

def kleisliIdApplicative[R]: Applicative[Kleisli[Id, R, ?]] = ...

我假设某种形式T[P0, ?]是一个带参数的类型构造函数。但是,我无法找到解释类型参数中问号用法的文档。

相关问题是问号和下划线之间有什么区别?

是否存在所有这些都有详细记录的地方?

1 个答案:

答案 0 :(得分:12)

问号语法来自名为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

这是一种相当复杂的方式(但不幸的是Scala中唯一的方法)表达类型lambda,即部分应用的类型构造函数。