2015-08-08 12 views
33

Sto lavorando a un plug-in per GHC, quindi sto leggendo la documentazione per alcune delle sue implementazioni.Che cosa significa la sorgente GHC per "zonk"?

Il verbo "to zonk" è dappertutto, ma non riesco a rintracciare una spiegazione di cosa significa zonk qualcosa o (in termini generali) quando si potrebbe desiderare. Riesco a trovare un sacco di note su circostanze complicate in base alle quali è necessario zonk o meno per zonk qualcosa, ma senza la minima idea di quale sia il quadro generale sto avendo molti problemi a seguire.

+9

["Ricordarsi di zonk gli skolem di un'implicazione"] (https://git.haskell.org/ghc.git/commitdiff/c32bb5d0c09a7e55197191f152c6875b398717cf) è così euforico! – duplode

+6

"Zonking percorre un tipo, restituendo un nuovo tipo in cui le variabili di unificazione vengono sostituite dai tipi a cui sono unificate." - [un'email scritta Simon Peyton-Jones] (https://mail.haskell.org/pipermail/glasgow-haskell-users/2013-Agosto/024209.html). Non ricordo abbastanza a riguardo per lasciare una risposta più utile di quella, comunque. –

risposta

23

Un tipo non zonato può avere variabili di tipo che sono i riferimenti mutabili riempiti durante l'unificazione (e questa mutabilità è fortemente utilizzata dal correttore di tipi per aumentare le prestazioni). Zonking attraversa un tipo e sostituisce tutti i riferimenti mutabili con il tipo a cui si dissocia; quindi, la struttura risultante è immutabile e non richiede alcun dereferenziamento da interpretare.

Si noti che queste variabili di tipo sono meta -variabili, cioè non corrispondono alle variabili di tipo introdotte dal polimorfismo; piuttosto, sono variabili di unificazione da sostituire con tipi reali. La scelta della sostituzione viene decisa dal tipo di verifica/tipo di processo di inferenza e quindi la sostituzione effettiva viene eseguita durante la zonking.

Questa nozione di zonking si estende naturalmente ad altre rappresentazioni intermedie del typechecker che contengono tipi.