새 role system and annotations에 유형 (및 데이터) 패밀리 매개 변수가 역할 nominal
에 있어야하는 이유를 알고 있습니다. 내가 ty
및 a
이 nominal
역할을 얻을 것이라고명목 유형 역할 및 데이터 패밀리
data family CoordinateRepresentation ty a :: *
를 선언 할 때
그래서 나는 기대했다. (실제 예제는 관련된 데이터 패밀리입니다. 그러나 아무 것도 변경되지 않는다고 생각하기 때문에 그로 인한 추가 노이즈는 생략하고 있습니다.)내가 예상하지 못한 것은
으로 변경했을 때입니다.은 이름이없는 두 번째 유형 인수가 여전히 nominal
역할을 갖습니다.
왜 이런가요? data instance CoordinateRepresentation ... = ...
은 신선한 생성자를 만들어야하기 때문에 안전하게 representational
역할을 얻을 수 없었습니까? 어떻게 그 생성자는 컴파일러가 볼 수없는 방식으로 nominal
역할에서 매개 변수를 사용할 수 있습니까? 오픈 시스템이고 별도의 편집이 있더라도 아직 이해가 안갑니다.
아, 알겠습니다. 두 번째 구문은 유형 패밀리의 "패턴 일치"부분을 첫 번째 인수로 제한하고 결과적으로'* -> * '가 어떤 의미에서는 "보통"이되도록 요구할 것이라고 예상했으나 그렇지 않습니다. –