
I was trying to implement a functional version of numerator/denominator simplifications of symbols. I came up with: simplify :: (Eq o, Ord o) => [o] -> [o] -> ([o], [o]) simplify [] bs = ([], bs) simplify ts [] = (ts, []) simplify (x:xs) (y:ys) | x == y = simplify xs ys | x < y = ([x] ++ (fst $ simplify xs (y:ys)), snd $ simplify xs (y:ys)) | otherwise = (fst r, [y] ++ snd r) where r = simplify (x:xs) ys simplify2 :: (Eq o, Ord o) => [o] -> [o] -> ([o], [o]) simplify2 a b = simplify (sort a) (sort b) -- sort not shown here In the second guard of the simplify function the expression 'simplify xs (y:ys)' is repeated. I would like to write instead: simplify (x:xs) (y:ys) | x == y = simplify xs ys | x < y = ([x] ++ fst r, snd r) where r = simplify xs (y:ys) | otherwise = (fst r, [y] ++ snd r) where r = simplify (x:xs) ys But doing so is parse error: $ ghc xoutil/dim/meta.hs [1 of 1] Compiling Meta ( xoutil/dim/meta.hs, xoutil/dim/meta.o ) xoutil/dim/meta.hs:19:3: parse error on input ‘|’ I'm using: ghc 7.10.3. Any ideas of why this is a syntax error? Best regards, Manuel.