Почему на Хаскеле нет лямбда-абстракций на уровне типов?


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.