2013-08-22 10 views
10

Co to jest ta forma dopasowania do wzorca o nazwie: Option{..} <- ..., np. jak to jest stosowane tutaj:Dopasowywanie wzorców formularza: Opcja {..} <-

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

Wydaje przedefiniować cabal i nostylish. Przed dopasowaniem wzoru cabal ma typ Option -> Maybe String, ale ma typ Maybe String. Ten przykład pochodzi z ostatnio przesłanego pakietu cabal2ghci.

Odpowiedz

18

To jest syntaktyczne rozszerzenie GHC o nazwie record wildcards. Cytowanie dokumentację:

składnia Record wieloznaczny umożliwia ".." w strukturze rekordu, gdzie każdy pomijana pole f zostaje zastąpiona przez wzór f = f.

więc ten kod jest równoważne

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

skutecznie wiążąca nazwę x do wartości pola rekordu nazwie x dla każdego pola w typie rekordu.

<- część jest tu bez znaczenia, może równie dobrze można napisać

let Option { .. } = some expression 
Powiązane problemy