2013-08-22 13 views
10

Was ist diese Form des Musterabgleichs genannt: Option{..} <- ..., z.B. wie es hier verwendet wird:Musterabgleich des Formulars: Option {..} <-

data Option = Option { cabal :: Maybe String , noStylish :: Bool } 
... 
main = do 
    Option{..} <- cmdArgs defOption 
    cabp <- case cabal of 
    Nothing -> do 
    ... 

Es scheint cabal und nostylish neu zu definieren. Vor der Musterübereinstimmung cabal hat Typ Option -> Maybe String, aber nachdem es Maybe String Typ hat.

Dieses Beispiel stammt aus dem kürzlich hochgeladenen Paket cabal2ghci.

Antwort

18

Dies ist eine GHC-syntaktische Erweiterung namens record wildcards. Zitiert Dokumentation:

Nehmen Sie Wildcard-Syntax ein ".." in einem Aufzeichnungsmuster ermöglicht, wobei jedes elided Feld f durch das Muster ersetzt wird f = f.

So ist dieser Code entspricht

Option { cabal = cabal, noStylish = noStylish } <- cmdArgs defOption 

effektiv Namen in dem Satzart x auf den Wert des Rekordfeldes mit dem Namen x für jedes Feld zu binden.

<- Teil ist hier irrelevant, können Sie auch

schreiben
let Option { .. } = some expression 
Verwandte Themen