【问题标题】:Haskell in GHCI: Why do I need parens to make this pattern match work?GHCI 中的 Haskell:为什么我需要括号来使这种模式匹配工作?
【发布时间】:2010-12-13 20:24:47
【问题描述】:

所以使用 GHCI,这些语句是等价的,这对我来说很有意义,因为 end0 中的列表表达式是 end1 中的列表表达式的语法糖:

let end0 [x,y,z] = z

let end1 (x:y:z:[]) = z

但是从 end1 的模式中取出括号会给我一个“模式中的解析错误”错误。那为什么呢?括号在模式匹配中是否具有特殊含义,还是像我通常在将括号与运算符一起使用时所想到的优先级问题?

【问题讨论】:

  • 注意:这并不特定于 GHCi。
  • 啊,我应该删除 GHCI 标签并使其仅成为 Haskell 吗?我猜对我来说它仍然相关,因为我通常在 GHCI 中使用这些构造。
  • 您通常不会在 GHCi 之外进行模式匹配?因为任何涉及构造函数的匹配都是如此。
  • 不,只是我在 GHCi 时想到了这个问题,所以最初我认为我的问题是 GHCI 特定的,直到被第一条评论纠正。

标签: haskell pattern-matching


【解决方案1】:

这与优先级有关。

函数优先于 :,因此 GHC 会推断您仅为 x 定义函数。这就是为什么你必须把它全部打包在括号内。

【讨论】:

【解决方案2】:

因为没有括号,它被解析为let (end1 x):y:z:[] = z

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    相关资源
    最近更新 更多