2012-02-01 17 views
5

dal Yesod Book.Hamlet accesso automatico alle variabili nel campo di applicazione

Amleto ha automaticamente accesso alle variabili in ambito quando viene chiamato. Non è necessario specificare in modo specifico le variabili.

Cos'è questa magia profonda? Come può sapere automagicamente quali sono le variabili in ambito?

+0

Mentre non so nulla, probabilmente è il modello haskell. Naturalmente (per me) il modello haskell è una magia profonda, quindi eccoci qui :) Un esempio più semplice della stessa cosa è il quickcheckAll di QuickCheck: esso conosce magicamente tutti i tuoi binding prop_ * e li esegue. –

risposta

9

Hamlet è basato su Template Haskell; in particolare, un quasiquoter (ad esempio [hamlet| ... |]) viene utilizzato per i modelli in linea e una giunzione (ad esempio $(hamletFile "foo")) viene utilizzata per creare modelli da un file. Le variabili sono quindi accessibili con le caratteristiche di introspezione di Template Haskell.

Questo ha benefici al di là che consente l'accesso automatico alle variabili:

  • I modelli risultanti sono suscettibili più efficienti di quelli analizzati e interpretati in fase di esecuzione, dal momento che i modelli di Hamlet sono compilati al normale codice Haskell a tempo di compilazione.

  • Durante la lettura di un modello da un file, il file viene analizzato in fase di compilazione e incorporato nel file binario risultante, quindi i modelli non devono essere tenuti in giro nella stessa posizione in fase di esecuzione e la validità di i modelli sono assicurati staticamente.

Credo che questi vantaggi si applicano a tutti i modelli di famiglia Shakespeare. The Haddock documentation ha ulteriori informazioni sui quasiquoters e sulle giunture disponibili.

+0

Il link sopra l'eglefino è rotto, ma questi potrebbero puntare nella giusta direzione: http://www.haskell.org/haskellwiki/Template_Haskell#Template_Haskell_tutorials_and_papers –

4

È una funzionalità di Haskell quasiquotation, che è la sintassi [xxx| .... |].

Il quasiquoter può accedere a qualsiasi variabile che è in ambito, in modo che possano essere interpolate. L'effettiva implementazione dell'interpolazione (se presente) dipende dal quasiquoter stesso.

Problemi correlati