이 질문은 주관적이지 않습니다. 매우 구체적인 동사가 참조 된 책에 사용되며, 나는 무언가를 오해하는 것이 두렵기 때문에 그 구절의 의미가 무엇인지 이해하고 싶습니다.
에서 당신에게 하스켈 알아보기 , 다음 단락은 "우리는 가정이 포함 된 세 번째와 마지막입니다 *".
data Barry t k p = Barry { yabba :: p, dabba :: t k }그리고 우리는 그것을 인스턴스로 만들고 싶습니다
Functor.Functor종류의 종류를 원* -> *하지만Barry그 종류가있는 것처럼 보이지 않습니다. 어떤 종류Barry입니까? 글쎄, 우리는 세 가지 유형의 매개 변수가 필요하다는 것을 알았습니다something -> something -> something -> *. 그것이p콘크리트 유형이므로 일종의 이라고 말하는 것이 안전합니다*. 를 위해k, 우리는*확장에 의해 일종의을t가지고 있다고 가정* -> *합니다. 이제 이러한 종류를something자리 표시 자로 사용한으로 바꾸고 종류가 임을 알 수 있습니다(* -> *) -> * -> * -> *.
우리는 왜 아무것도 가정하지 않습니까? "우리는 X를 가정합니다 (즉, X가 참이라고 가정합니다)"를 읽을 때 X가 거짓 인 경우도 고려해야한다고 생각하는 것은 당연합니다. 예제의 특정의 경우, 수없는 t종류의 수 (* -> *) -> *와 k종류의 (* -> *)? 이 경우라면, 무엇이든 t하고 k실제로 있었다, t k여전히, 구체적인 유형이 될 것인가?
나는 추론의 전체 라인이 컴파일러에 대해 검사되는 것을 보았지만 컴파일러 가을 가정한다고 생각하지 않습니다 . 그렇다면, 나는 그것이 무엇인지 알고 싶습니다. 다시하지 않으면 나는 단락의 의미를 놓치고 두려워합니다.
k :: L모든 종류L만큼,t :: L -> *. 그러나 여기서 컴파일러는 특정L또는 특정 종류를 선택해야합니다 . 다품종이 가장 일반적인 옵션이지만 GHC가 선택합니다L = *(기본 하스켈에는 다품종이 없으므로 확장으로 설정해야 함). LYAH는 다소 임의적 인 것을 선택하기 때문에 "가정"(AFAICT)이라는 단어를 사용합니다.