Haskell - 模式中的Parse错误

时间:2012-10-08 12:12:51

标签: haskell pattern-matching parse-error

此代码:

validate :: Matrix-> Bool
validate x: [] = length x
validate x: xs = (length x == lenght.head $ xs) == (validate tail xs)

产生此错误:

Parse error in pattern: validate

为什么?

我的目标是,如果矩阵的格式正确,即所有行中的列数相等,则返回true,反之亦然。

1 个答案:

答案 0 :(得分:13)

函数应用程序的优先级高于:等运算符。所以编译器认为:

validate x:[]

表示:

(validate x):[] = ..

当然是错的。

因此,您应该使用括号明确消除歧义:

validate (x:[]) = ..

第二行同样如此:

validate (x:xs) = ..

此外,如果您未在功能应用程序中提供任何括号,则假定它是左关联的,所以:

validate tail xs

与:

相同
(validate tail) xs

而不是:

validate (tail xs)

通常的做法是使用$运算符,如:

validate $ tail xs