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

时间:2013-12-01 12:07:07

标签: haskell syntax pattern-matching

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

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

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

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

我试图在没有大括号的情况下使用它,但在加载到ghci期间会导致错误。

1 个答案:

答案 0 :(得分:8)

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

看,如果你写

h x:xs

这看起来像

(h x) : xs

到解析器。因此我们写了

h (x:xs)

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