Warum hat Haskell keine Lambda-Abstraktionen auf Typebene?

22

Gibt es einige theoretische Gründe dafür (wie dass die Typprüfung oder die Typinferenz unentscheidbar werden würde) oder praktische Gründe (zu schwierig, richtig zu implementieren)?

Gegenwärtig können wir Dinge in newtypeÄhnliches verpacken

newtype Pair a = Pair (a, a)

und dann haben Pair :: * -> *

aber wir können sowas nicht machen λ(a:*). (a,a).

(Es gibt einige Sprachen, in denen sie vorkommen, zum Beispiel Scala .)

Petr Pudlák
quelle
4
Wenn Sie eine Art von Typsystem verwenden, wird die andere Art von Typsystem ausgeschlossen, da das Ganze konsistent sein muss. Typ Level Lambda wäre in der Kategorietheorie sehr seltsam ...
tp1
1
stackoverflow.com/questions/4922560/… ist auch verwandt.
Edward Z. Yang

Antworten:

17

Eine Typinferenz mit Lambdas auf Typebene würde eine Vereinheitlichung höherer Ordnung erfordern, die nicht zu entscheiden ist. Dies ist die Motivation, sie nicht zuzulassen. Aber wie bei anderen unentscheidbaren Funktionen (wie der Typinferenz für GADTs) kann es möglich sein, Typensignaturen anzufordern und diese zuzulassen. Ich bin mir nicht sicher, ob das jemand untersucht hat.

August
quelle