2013-08-22 18 views
10

Bu eşleştirme biçimi şu şekilde adlandırılır: Option{..} <- ..., ör. Burada kullanıldığı şekilde:form eşleştirmesi: Seçenek {..} <-

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

O cabal ve nostylish yeniden tanımlamak gibi görünüyor. Desen eşleşmeden önce cabal, Option -> Maybe String türüne sahiptir, ancak Maybe String türüne sahiptir.

Bu örnek, son yüklenen paket cabal2ghci'dan gelmektedir.

cevap

18

Bu, record wildcards adı verilen bir GHC sözdizimsel uzantıdır. Belgeleri alıntı:

Tutanak joker sözdizimi her elided alan f desen f = f değiştirilir rekor deseni, bir ".." izin verir.

Yani bu kod
Option { cabal = cabal, noStylish = noStylish } <- cmdArgs defOption 

etkili bir rekor tipinde her alan için x adlı kayıt alanının değerine adını x bağlayıcı eşdeğerdir.

<- kısım siz de yazabilirsiniz, burada alakasız

let Option { .. } = some expression