所以使用GHCI,这些语句对我来说是等价的,因为end0中的list表达式是end1中列表表达式的语法糖:
let end0 [x,y,z] = z
let end1 (x:y:z:[]) = z
但是从end1的模式中取出parens会给我一个“模式中的Parse错误”错误。那为什么呢? parens在模式匹配中是否具有特殊含义,或者它是一个优先级问题,就像我通常认为当我使用parens与运算符时一样?
答案 0 :(得分:7)
它与优先权有关。
函数优先于:,因此GHC会推断您只为x定义函数。这就是为什么你必须将它全部包装在parens中。
答案 1 :(得分:6)
因为没有parens,它被解析为let (end1 x):y:z:[] = z
。