Чому у Haskell немає лямбда-абстракцій на рівні?


22

Чи є якісь теоретичні причини для цього (наприклад, перевірка типу чи умовивід типу стане нерозбірливою) або практичні причини (занадто складно їх правильно реалізувати)?

Наразі ми можемо обернути речі newtypeподібними

newtype Pair a = Pair (a, a)

а потім мати Pair :: * -> *

але ми не можемо зробити щось подібне λ(a:*). (a,a).

(Є деякі мови, якими вони є, наприклад, Scala .)


4
Вибір одного типу типів у користування виключає інші типи систем, оскільки вся справа повинна бути послідовною. Лямбда рівня типу була б дуже дивною в теорії категорій ...
tp1,

Відповіді:


17

Виведення типу лямбда типів вимагає уніфікації вищого порядку, що не можна визначити. Це мотивація їх заборонити. Але як це сталося з іншими невідкладеними функціями (наприклад, умовивід типу для GADT), можливо, буде потрібно вимагати підписи типу та дозволити це. Я не впевнений, чи це хтось досліджував.

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