Haskell Language
역할
수색…
소개
TypeFamilies
언어 확장을 통해 프로그래머는 유형 수준 함수를 정의 할 수 있습니다. GADT 타입이 아닌 생성자와 타입 함수를 구별하는 것은 타입 함수의 파라미터가 비 파라 메트릭이 될 수있는 반면 타입 생성자의 파라미터는 항상 파라 메트릭이 될 수 있다는 것입니다. 이 구별은 GeneralizedNewTypeDeriving
확장의 정확성에 중요합니다. 이 구별을 설명하기 위해 Haskell에서 역할이 소개됩니다.
비고
SafeNewtypeDeriving
도 참조하십시오.
명목상의 역할
Haskell Wiki 는 타입 함수의 매개 변수가 아닌 매개 변수의 예를 보여줍니다 :
type family Inspect x
type instance Inspect Age = Int
type instance Inspect Int = Bool
여기서 x
는 타입 인자에 Inspect
를 적용한 결과를 결정하기 위해 비 파라 메 트릭입니다. 타입 함수는 x
를 검사해야합니다.
이 경우, x
의 역할은 공칭입니다. RoleAnnotations
확장을 사용하여 명시 적으로 역할을 선언 할 수 있습니다.
type role Inspect nominal
대표적인 역할
유형 함수의 매개 변수 매개 변수의 예는 다음과 같습니다.
data List a = Nil | Cons a (List a)
type family DoNotInspect x
type instance DoNotInspect x = List x
DoNotInspect
를 형식 인수에 적용한 결과를 결정하기 위해 x
를 검사 할 필요가 없기 때문에 x
는 매개 변수입니다.
이 경우, x의 역할은 표상 적이다. RoleAnnotations
확장을 사용하여 명시 적으로 역할을 선언 할 수 있습니다.
type role DoNotInspect representational
팬텀 역할
팬텀 유형 매개 변수 에는 팬텀 역할이 있습니다. 팬텀 역할은 명시 적으로 선언 할 수 없습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow