У haskell есть зависимые типы?


20

Я знаю, что у Haskell уже есть возможность параметризовать тип поверх другого типа (аналогично шаблонному программированию в C ++), но мне интересно, может ли Haskell также параметризировать тип над значениями - поддерживает ли он зависимые типы. С зависимыми типами вы можете иметь тип, параметризованный над целыми числами, например, векторы размера n, матрицы размера n × m и т. Д.

Если нет, то почему нет? И есть ли вероятность, что это будет поддерживаться в будущем?

Ответы:


18

У Haskell нет полностью зависимых типов, хотя он может быть очень близок с такими расширениями, как DataKindsи TypeFamilies. На данный момент, насколько мне известно, проблема в том, что Haskell уровня значений имеет явные основания, а Haskell уровня типов - нет.

Это не останавливает вас от параметризации типов над другими типами, включая DataKind-лифтинг значений . Начиная с GHC 7.6 и с DataKindsвключенным, вы можете использовать натуральные числа и строки на уровне типа, а также кортежи на уровне типа, списки на уровне типа и подъемы на уровне типа для любого (не обобщенного, не обобщенного) неограниченные) алгебраические типы данных, что аналогично (но гораздо более общему, чем) умению C ++ использовать целые числа в шаблонах.


1
Предстоящие изменения в GHC 8 добавляют полностью зависимые типы?
Янус Троелсен

@JanusTroelsen Не совсем; они позволяют зависимые виды .
Пламя Птариена

8

Чтобы немного подробнее рассказать о том, что Пламя Птариена хорошо объяснило о текущем статусе, и GHC Haskell, похоже, движется дальше в направлении зависимых типов (сохраняя разделение фаз) с каждой версией.

Так, например, на ICFP 2013 в сентябре этого года должен быть представлен документ о следующей фазе этого процесса «На пути к типу Haskell с зависимой типизацией: система FC с добрым равенством» о свертывании уровней типа и типа. Как было объявлено, план будет около 3 лет назад .

И даже упоминается следующий шаг: «Нам также известно, что в предстоящей диссертации Адама Гандри будут включены Π-типы в версии System FC, и мы захотим сделать эту функцию доступной и на исходном языке. (Личное общение)»


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.