[Haskell-cafe] Most elegant funciton for removing adjacent duplicates from a list using foldl and foldr

R J rj248842 at hotmail.com
Sun Mar 15 08:21:14 EDT 2009

I need to write an implementation using foldl, and a separate implementation using foldr, of a function, "remdups xs", that removes adjacent duplicate items from the list xs.  For example, remdups [1,2,2,3,3,3,1,1]= [1,2,3,1].

My approach is first to write a direct recursion, as follows:

   remdups               :: (Eq a) => [a] -> [a]
   remdups []            =  []
   remdups (x : [])      =  [x]
   remdups (x : xx : xs) =  if x == xx then remdups (x : xs) else x : remdups (xx : xs)

This code works, but it has three cases, not usual two, namely [] and (x : xs).

What, if any, is the implementation using only two cases?

Also, if three cases are required, then how can it be implemented using foldr, and how using foldl?


Express your personality in color! Preview and select themes for Hotmail®. 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090315/b492b96f/attachment.htm

More information about the Haskell-Cafe mailing list