чи має 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: System FC з доброю рівністю" , про збій рівнів і типів. Як було оголошено про план десь 3 роки тому .

І навіть згадується наступний крок: "Ми також усвідомлюємо, що наступна дисертація Адама Гундрі буде включати Π-типи у версії System FC, і ми хочемо зробити цю функцію доступною і на мові джерел. (Особисте спілкування)"


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.