Haskell:parsing模式中的错误

谁喜欢告诉我这个代码有什么问题(在语法上)?

-- merge two sorted lists mergeX [] b res = b ++ res mergeX a [] res = a ++ res mergeX a:as b:bs res | a > b = mergeX as b:bs a:res | otherwise = mergeX a:as bs b:res 

解释:

分析模式中的错误:mergeX

你需要一些括号:

 mergeX [] b res = b ++ res mergeX a [] res = a ++ res mergeX (a:as) (b:bs) res | a > b = mergeX as (b:bs) (a:res) | otherwise = mergeX (a:as) bs (b:res) 

原因是:比函数应用的优先级低,所以mergeX a:as b:bs res将被parsing为:

 (mergeX a):(as b):(bs res) 

这是一个错误。

你需要把构造函数模式(或者叫做)放在隐含的位置。

 mergeX (a:as) (b:bs) res