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

22

Существуют ли для этого какие-либо теоретические причины (например, проверка типов или вывод типов стали бы неразрешимыми) или практические причины (слишком трудно осуществить должным образом)?

В настоящее время мы можем обернуть вещи newtypeкак

newtype Pair a = Pair (a, a)

а затем есть Pair :: * -> *

но мы не можем сделать что-то подобное λ(a:*). (a,a).

(Есть некоторые языки, в которых они есть, например, в Scala .)

Петр Пудлак
источник
4
Выбор одного типа системы типов в использовании исключает другой тип систем типов, так как все это должно быть согласованным. Тип уровня лямбда был бы очень странным в теории категорий ...
tp1
1
stackoverflow.com/questions/4922560/… также связано.
Эдвард З. Ян

Ответы:

17

Вывод типа с лямбдами на уровне типа потребует объединения более высокого порядка, что неразрешимо. Это мотивация для их запрета. Но, как это случилось с другими неразрешимыми функциями (такими как вывод типов для GADT), может потребоваться подпись типов и разрешить это. Я не уверен, что это кто-то расследовал.

augustss
источник