Perché Haskell non ha astrazioni lambda a livello di tipo?


22

Ci sono alcune ragioni teoriche per questo (come il fatto che la verifica del tipo o l'inferenza del tipo diventerebbero indecidibili) o ragioni pratiche (troppo difficili da implementare correttamente)?

Attualmente, possiamo avvolgere le cose newtypecome

newtype Pair a = Pair (a, a)

e poi avere Pair :: * -> *

ma non possiamo fare qualcosa del genere λ(a:*). (a,a).

(Ci sono alcune lingue che le hanno, ad esempio Scala .)


4
La scelta di un tipo di sistema di tipi in uso esclude l'altro tipo di sistemi di tipo poiché l'intera cosa deve essere coerente. Il livello di lambda sarebbe molto strano nella teoria delle categorie ...
tp1

Risposte:


17

L'inferenza di tipo con lambda di livello tipo richiederebbe un unificazione di ordine superiore che è indecidibile. Questa è la motivazione per non consentirle. Ma come è accaduto con altre caratteristiche indecidibili (come l'inferenza di tipo per GADT), potrebbe essere possibile richiedere firme di tipo e consentirlo. Non sono sicuro che sia stato indagato da nessuno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.