形式的模式匹配:选项{..}< -

时间:2013-08-22 05:19:15

标签: haskell pattern-matching

这种形式的模式匹配称为:Option{..} <- ...,例如因为它在这里使用:

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

似乎重新定义了cabalnostylish。在模式匹配cabal之前,类型为Option -> Maybe String但在类型Maybe String之后。

此示例来自最近上传的包cabal2ghci

1 个答案:

答案 0 :(得分:18)

这是一个名为record wildcards的GHC语法扩展。引用文档:

  

记录通配符语法允许记录模式中的"..",其中每个省略的字段f由模式f = f替换。

所以这段代码相当于

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

有效地将名称x绑定到记录类型中每个字段的名为x的记录字段的值。

<-部分与此无关,您也可以写

let Option { .. } = some expression