2016-07-27 8 views
3

내가합니다 (Scalaz 라이브러리에서) 다음 코드 조각을 이해하기 위해 노력하고있어 매개 변수 매개 변수를 취하는 생성자. 그러나 형식 매개 변수에서 물음표 사용법을 설명하는 설명서를 찾을 수 없습니다.스칼라 : 나는 양식 <code>T[P0, ?]</code>의 유형이 유형 -이라고 믿고있어</p> <pre><code>def kleisliIdApplicative[R]: Applicative[Kleisli[Id, R, ?]] = ... </code></pre> <p>: 유형 물음표

관련 질문은 물음표와 밑줄의 차이점은 무엇입니까?

이 모든 것이 잘 문서화되어있는 곳이 있습니까?

답변

10

물음표 구문은 kind-projector이라는 컴파일러 플러그인에서 제공됩니다.

당신이 여기 scalaz 빌드에 포함되는 것을 볼 수 있습니다 https://github.com/scalaz/scalaz/blob/series/7.3.x/project/build.scala#L226

플러그인에

Kleisli[Id, R, ?] 

변환 (대략) 다소 복잡한 방법입니다

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

(하지만 불행하게도 스칼라에서 유일한 방법) 타입 람다, 즉 부분적으로 적용된 타입 생성자를 표현합니다.

+0

여기서'# L '로 무엇을 표시할까요? 이 식은 스칼라 2.11에서 컴파일되지 않습니다. – Matthias

+0

@Matthias L은 익명 형식 (즉, {} 블록) 내에 정의 된 형식 멤버입니다. 컴파일해야하는데, 어떤 오류가 발생합니까? –

+0

' : 1 : 오류 :'; ' '#''({타입 L [A]}) # L' ^ – Matthias