하스켈에는 종속 유형이 있습니까?


20

Haskell은 이미 다른 유형 (C ++의 템플릿 프로그래밍과 유사)에 비해 유형을 매개 변수화 할 수 있다는 것을 알고 있지만 Haskell이 종속 유형을 지원하는지 여부에 따라 값보다 유형을 매개 변수화 할 수 있는지 궁금합니다. 종속 유형을 사용하면 정수에 대해 매개 변수화 된 유형 (예 : 크기 n의 벡터, 크기 n x m의 행렬 등)을 가질 수 있습니다.

그렇지 않다면 왜 안됩니까? 향후 지원 될 가능성이 있습니까?

답변:


18

Haskell은 DataKindsand와 같은 확장으로 매우 가까울 수 있지만 완전히 종속 된 유형은 없습니다 TypeFamilies. 내가 아는 한, 현재 문제는 가치 수준의 Haskell은 명백한 바닥을 가지고 있지만 유형 수준의 Haskell은 그렇지 않습니다.

이것 으로 값 DataKind리프팅을 포함하여 다른 유형보다 매개 변수 유형을 막을 수 있습니다 . GHC 7.6부터는 DataKinds활성화 된 상태에서 타입 레벨 튜플, 타입 레벨 목록 및 (높지 않은 종류의 일반화되지 않은) 모든 타입의 리프팅뿐만 아니라 타입 레벨 내츄럴 및 문자열을 사용할 수 있습니다 , 제한되지 않은 대수 데이터 형식. 템플릿에서 정수를 사용하는 C ++의 기능과 비슷하지만 훨씬 일반적입니다.


1
GHC 8에서 다가오는 변경 사항이 완전 종속 유형을 추가합니까?
Janus Troelsen 님이

@JanusTroelsen 그렇지 않다; 그들은 의존적 인 종류 를 가능하게 합니다.
Ptharien 's Flame

8

Ptharien 's Flame이 현재 상태에 대해 잘 설명한 내용을 조금 확장하기 위해 GHC Haskell은 각 버전에 따라 종속 유형 (상 분리 유지) 방향으로 더 나아가고있는 것으로 보입니다.

예를 들어 이번 9 월 ICFP 2013에서이 프로세스의 다음 단계에 대한 논문 은 종류 및 유형 수준의 축소에 대한 "종속적으로 유형이 지정된 Haskell을 향한 시스템 FC : 종류가 동일한 시스템 FC" 로 제공되어야합니다 . 약 3 년 전에 계획발표되었다 .

그리고 다음 단계도 언급합니다. " 아담 건 드리의 향후 논문 에는 System FC 버전에 Π 유형이 포함될 것이며이 기능을 원어로도 제공 할 수 있기를 원합니다. (개인 커뮤니케이션)"


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.