variable que pattern functions anonima haskell pattern-matching operator-precedence parse-error

que - syntax haskell



Haskell: error de anĂ¡lisis en el patrĂ³n (2)

¿A quién le gusta decirme qué está mal con este código (sintácticamente)?

-- 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

Interprete:

Error de parse en el patrón: mergeX


Necesita poner patrones de constructor (o como se llamen) en parantheses.

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


Necesitas un paréntesis

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)

La razón es porque : tiene una prioridad menor que la aplicación de función, por lo que mergeX a:as b:bs res se analizará como:

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

que es un error