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 .)


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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.