10

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

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

它似乎重新定义了cabaland nostylish。在模式匹配cabal有 type之前,Option -> Maybe String但在它有 type 之后Maybe String

这个例子来自最近上传的包cabal2ghci

4

1 回答 1

18

这是一个称为记录通配符的 GHC 语法扩展。引用文档:

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

所以这段代码相当于

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

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

<-部分在这里无关紧要,你也可以写

let Option { .. } = some expression
于 2013-08-22T05:28:34.720 回答