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

Eri*_*ikR 10 haskell pattern-matching

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

data Option = Option { cabal :: Maybe String , noStylish :: Bool }
...
main = do
  Option{..} <- cmdArgs defOption
  cabp <- case cabal of
    Nothing -> do
    ...
Run Code Online (Sandbox Code Playgroud)

它似乎重新定义cabalnostylish.在模式匹配之前cabal有类型Option -> Maybe String但在类型之后Maybe String.

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

rkh*_*rov 18

这是一个名为记录通配符的GHC语法扩展.引用文件:

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

所以这段代码相当于

Option { cabal = cabal, noStylish = noStylish } <- cmdArgs defOption
Run Code Online (Sandbox Code Playgroud)

有效地将名称绑定xx为记录类型中的每个字段命名的记录字段的值.

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

let Option { .. } = some expression
Run Code Online (Sandbox Code Playgroud)