2016-07-27 15 views
3

私は(Scalazライブラリから)次のコードを理解しようとしています:スカラ:型パラメータで疑問符

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

私は、フォームT[P0, ?]のタイプがタイプ - であることを仮定していますパラメータを取るコンストラクタです。しかし、タイプパラメータの疑問符の使用方法を説明するドキュメントは見つかりません。

関連する質問は、疑問符とアンダースコアの違いは何ですか?

これはすべて文書化されている場所はありますか?

答えて

10

疑問符の構文は、kind-projectorというコンパイラプラグインから得られます。あなたはそれがここscalazのビルドに含まれて見ることができます

https://github.com/scalaz/scalaz/blob/series/7.3.x/project/build.scala#L226

プラグインはかなり複雑な方法(ある(およそ)

({type L[A] = Kleisli[Id, R, A]})#L 

Kleisli[Id, R, ?] 

を変換するが、残念なことにスカラの唯一の方法)は、型lambda、すなわち部分的に適用された型のコンストラクタを表現することです。

+0

「#L」でここで何を表していますか?この式はScala 2.11でコンパイルされません。 – Matthias

+0

@Matthias Lは、匿名型(つまり{}ブロック)内で定義された型メンバーです。それはコンパイルする必要があります、あなたはどのようなエラーを取得しますか? –

+0

:1:エラー: ';' '#''({タイプL [A]})#L' ^ – Matthias