Haskell-模式中的分析错误

Haskell-模式中的分析错误,haskell,pattern-matching,parse-error,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,即所有行中的列数相等,反之亦然。函数应用程序的优先级高于运算符,例如:。因此,编译器认为: vali

此代码:

validate :: Matrix-> Bool
validate x: [] = length x
validate x: xs = (length x == lenght.head $ xs) == (validate tail xs)
产生以下错误:

Parse error in pattern: validate
为什么?


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

函数应用程序的优先级高于运算符,例如:。因此,编译器认为:

validate x:[]
指:

(validate x):[] = ..
这当然是错误的

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

validate (x:[]) = ..
第二行也是如此:

validate (x:xs) = ..
此外,如果在函数应用程序中未提供任何括号,则假定它是左关联的,因此:

validate tail xs
同:

(validate tail) xs
而不是:

validate (tail xs)
常用的做法是使用$运算符,如中所示:

validate $ tail xs

函数应用程序的优先级高于运算符,例如:。因此,编译器认为:

validate x:[]
指:

(validate x):[] = ..
这当然是错误的

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

validate (x:[]) = ..
第二行也是如此:

validate (x:xs) = ..
此外,如果在函数应用程序中未提供任何括号,则假定它是左关联的,因此:

validate tail xs
同:

(validate tail) xs
而不是:

validate (tail xs)
常用的做法是使用$运算符,如中所示:

validate $ tail xs