这是我的代码:
connected :: [(Integer,Integer)] -> Bool
connected [] = True
connected [(_,_)] = True
connected (a,b):(c,d):xs
| a > c = False
|otherwise = connected (c,d):xs
当我加载GHCi时,它会显示
error: parse error in pattern: connected
我在哪里弄错了?
答案 0 :(得分:6)
您需要在两个地方的cons表达式周围添加括号:
connected :: [(Integer,Integer)] -> Bool
connected [] = True
connected [(_,_)] = True
connected ((a,b):(c,d):xs) -- (2)
| a > c = False
| otherwise = connected ((c,d):xs) -- (1)
函数应用程序比中缀运算符绑定得更紧密,因此connected (c,d) : xs
被解析为(connected (c,d)) : xs
。
模式表达式中发生了类似的事情。虽然你得到的无用的错误信息是相当不幸的。
意见旁注:我建议总是在中间操作符周围写入空格(例如,a : b
而不是a:b
),因为我认为省略空格会暗示操作符绑定比确实如此。