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?

È stato utile?

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 tipo Term a -> a nel complesso, ma il lato destro per eval (Lit i) ha tipo Int, poiché il costruttore sinistra aveva tipo Term 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 tipo Term a, o Term Bool, e la definizione data sarebbe ancora passare attraverso. Ma non saremmo in grado di scrivere eval :: 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top