函数声明Haskell中模式匹配中的括号

MC2*_*2DX 5 syntax haskell pattern-matching

我们是否必须在函数声明中使用模式匹配中的括号?

在下面的示例中,我有一个模式x:xs,其中x从列表中获取第一个元素并xs包含其余元素.

我想问一下括号是否是这种模式匹配的必要部分.

head' :: [a] -> a  
head' [] = error "Can't call head on an empty list!"  
head' (x:_) = x  
Run Code Online (Sandbox Code Playgroud)

我尝试使用它没有大括号,但它在加载到ghci期间导致错误.

Ing*_*ngo 8

括号不是模式匹配的一部分,同样意义上它们不是表达式评估的一部分.话虽这么说,括号肯定是模式和表达式语法的一部分.

看,如果你写

h x:xs
Run Code Online (Sandbox Code Playgroud)

这看起来像

(h x) : xs
Run Code Online (Sandbox Code Playgroud)

到解析器.因此我们写

h (x:xs)
Run Code Online (Sandbox Code Playgroud)

在等号的左手侧和右手侧.作为表达式,它表示"函数h应用于由x和xs构成的列表",并且在左侧它定义了该应用程序的等式.