Materiale per l'apprendimento GADT
Domanda
Ho iniziato a leggere su GADT in Haskell Wiki, ma non si sentiva a proprio agio comprenderlo. Mi consiglia un capitolo specifico libro o un post sul blog che spiega GADT per un principiante Haskell?
Soluzione
video tutorial per GADTs che potrebbe essere utile.
Altri suggerimenti
Mi piace l'esempio nella GHC manuale. E 'semplice, ed illustra alcuni punti chiave:
-
GADTs consentono di utilizzare il sistema tipo di Haskell per modellare il sistema di tipo di una lingua che sta implementando (il "linguaggio oggetto")
-
In questo modo la verifica statica di Haskell di affermare che il "compilatore passa" o quello che-non sono di tipo preservare. Funzioni che assumono termini oggetto di lingua può assumere questi termini sono ben tipizzati-. Funzioni che ritornano termini oggetto di lingua sono tenuti a produrre termini ben tipizzati-.
-
pattern matching un costruttore GADT provoca tipo raffinatezza.
eval
ha tipoTerm a -> a
nel complesso, ma il lato destro pereval (Lit i)
ha tipoInt
, poiché il costruttore sinistra aveva tipoTerm Int
. -
Il sistema Haskell non importa che tipo si dà il costruttori GADT. Potremmo altrettanto facilmente rendere ogni costruttore in
data Term a
danno un risultato di tipoTerm a
, oTerm Bool
, e la definizionedata
sarebbe ancora passare attraverso. Ma non saremmo in grado di scrivereeval :: Term a -> a
. Si sceglie i "tipi di tag" GADT a modello tuo problema, in modo che le funzioni utili che si desidera scrivere sono ben tipato.
GADTs wiki Haskell per i manichini è la migliore spiegazione che ho visto.
Il problema che ho (e ho altri sospetti) ho con la maggior parte delle introduzioni è che essi mostrano esempi di GADTs in termini di sintassi che non è ovvio fino a comprendere GADTs . Questo rende gli esempi più semplici su cui tutto è costruito particolarmente difficile da comprendere appieno, si può intuire a quale molti dei modelli stanno facendo, ma capire il ruolo esatto di ogni affermazione è impegnativo.
I "for Dummies", seziona postali e costruisce il senso della sintassi lungo la strada per spiegare i propri esempi di base, che lo rende un gran lunga più utile punto di partenza. Lo consiglio vivamente.