2015-06-28 20 views
10

ho cercato di trovare nel Haskell riferimento l'uso di questo:

getHomeR = defaultLayout $ do 
    setTitle "My Awesome Site" 
    $(widgetFile "home") 

In particolare:

$(widgetFile "home") 

So che l'operatore $ dà la precedenza a ciò che è alla destra di esso, ma non sono stato in grado di comprendere l'uso di $(). Chiunque?

risposta

10

Questo non sta utilizzando l'operatore dell'applicazione $, ma sta coinvolgendo un Template Haskell slice.

Molto approssimativamente, widgetFile "home" è il codice che viene eseguito durante la fase di compilazione : genera codice Haskell, che viene poi compilato come al solito. È una forma di metaprogramming in Haskell.

+0

Vedo così che non ha nulla a che fare con l'operatore $. 'widgetFile" home "' sarà quindi responsabile della generazione di questo codice al momento della compilazione? –

+1

@LuisDosReis Sì. Potrebbe ad esempio accedere a un file esterno, elaborarlo e generare un codice Haskell a seconda di esso. Questo può essere usato per ottenere un '# include 'generalizzato, ad esempio, dove il file incluso può usare una sintassi diversa. – chi

+0

Oh interessante, quindi posso applicare la metaprogrammazione anche a manipolare diversi linguaggi. –