2015-10-10 6 views
7

ich diese Art der Notation in alle Beispielcode für Yesod Web-Anwendungen zu sehen und habe keine Ahnung, was es bedeutet:X {..} <- getYesod Notation

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

Was bedeutet das Syntax?

ich auch die folgende sehen, gehe ich davon aus verwandten, Notation:

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

heißt Some Kennung x anstelle des kryptischen {..}.

Antwort

10

Diese werden record wildcards genannt - bei einer Datensatzdefinition (App in diesem Fall) bringt das Muster App { .. } alle Feldnamen in den Gültigkeitsbereich. Zum Beispiel mit der folgenden Datensatzdefinition

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

Sie es in einem Muster entsprechen können, die a und b Felder in Umfänge bringen z.B.

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

Sie können direkt mit einem Abschnitt in der GHC-Dokumentation verlinken. Zum Beispiel: https://downloads.haskell.org/~ghc/7.10.2/docs/html/users_guide/syntax-extns.html#record-wildcards –

+2

@ TaylorFausak - Danke, ich habe den Link aktualisiert. – Lee

Verwandte Themen