2015-10-10 13 views
7

sto vedendo questo tipo di notazione tutto il codice di esempio per le applicazioni web Yesod e non hanno idea di cosa significhi:X {..} <- getYesod notazione

getHomeR :: Handler Html 
getHomeR = do 
    App {..} <- getYesod 

Che cosa significa questa sintassi?

sto vedendo anche quanto segue, presumo correlato, la notazione:

getHomeR :: Handler Html 
getHomeR = do 
    App x <- getYesod 

cioè Alcuni identificatore x al posto del criptico {..}.

risposta

10

Questi sono chiamati record wildcards - data una definizione di record (App in questo caso), il modello App { .. } porta tutti i nomi di campo in ambito. Ad esempio data la seguente definizione del record

{-# LANGUAGE RecordWildCards #-} 
data Test = Test { a :: Int, b :: Int } 

si può abbinare su di esso in un modello, portando i campi a e b in ambito esempio

sumTest :: Test -> Int 
sumTest Test {..} = a + b 
+1

È possibile collegare direttamente a una sezione della documentazione GHC. Ad esempio: https://downloads.haskell.org/~ghc/7.10.2/docs/html/users_guide/syntax-extns.html#record-wildcards –

+2

@TaylorFausak - Grazie, ho aggiornato il collegamento. – Lee