GHCI中的Haskell:为什么我需要parens来使这种模式匹配工作?

时间:2010-12-13 20:24:48

标签: haskell pattern-matching

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

let end0 [x,y,z] = z

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

但是从end1的模式中取出parens会给我一个“模式中的Parse错误”错误。那为什么呢? parens在模式匹配中是否具有特殊含义,或者它是一个优先级问题,就像我通常认为当我使用parens与运算符时一样?

2 个答案:

答案 0 :(得分:7)

它与优先权有关。

函数优先于:,因此GHC会推断您只为x定义函数。这就是为什么你必须将它全部包装在parens中。

答案 1 :(得分:6)

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