这种形式的模式匹配称为:Option{..} <- ...
,例如因为它在这里使用:
data Option = Option { cabal :: Maybe String , noStylish :: Bool }
...
main = do
Option{..} <- cmdArgs defOption
cabp <- case cabal of
Nothing -> do
...
似乎重新定义了cabal
和nostylish
。在模式匹配cabal
之前,类型为Option -> Maybe String
但在类型Maybe String
之后。
此示例来自最近上传的包cabal2ghci
。
答案 0 :(得分:18)
这是一个名为record wildcards的GHC语法扩展。引用文档:
记录通配符语法允许记录模式中的
".."
,其中每个省略的字段f
由模式f = f
替换。
所以这段代码相当于
Option { cabal = cabal, noStylish = noStylish } <- cmdArgs defOption
有效地将名称x
绑定到记录类型中每个字段的名为x
的记录字段的值。
<-
部分与此无关,您也可以写
let Option { .. } = some expression