(**) Eliminate consecutive duplicates of list elements.
compress :: Eq a => [a] -> [a] compress = map head . group
We simply group equal values together (group), then take the head of each. Note that (with GHC) we must give an explicit type to compress otherwise we get:
Ambiguous type variable `a' in the constraint: `Eq a' arising from use of `group' Possible cause: the monomorphism restriction applied to the following: compress :: [a] -> [a] Probable fix: give these definition(s) an explicit type signature or use -fno-monomorphism-restriction
We can circumvent the monomorphism restriction by writing compress this way (See: section 4.5.4 of the report):
compress xs = map head $ group xs
An alternative solution is
compress  =  compress [a] = [a] compress (x : y : xs) = (if x == y then  else [x]) ++ compress (y : xs)