Perché Haskell non ha astrazioni lambda di livello tipo?

21

Ci sono alcuni motivi teorici per questo (come il controllo del tipo o l'inferenza del tipo diventerebbe indecidibile), o ragioni pratiche (troppo difficili da implementare correttamente)?

Al momento possiamo raggruppare le cose in newtype come

newtype Pair a = Pair (a, a)

e quindi avere Pair :: * -> *

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

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

    
posta Petr Pudlák 01.12.2012 - 09:55
fonte

1 risposta

15

L'inferenza del tipo con lambda di livello del tipo richiederebbe un'unificazione di ordine superiore che è indecidibile. Questa è la motivazione per non autorizzarli. Ma come è successo con altre caratteristiche indecidibili (come l'inferenza di tipo per GADT), potrebbe essere possibile richiedere le firme dei tipi e permetterlo. Non sono sicuro che sia stato studiato da nessuno.

    
risposta data 31.01.2013 - 17:06
fonte

Leggi altre domande sui tag