Suppose a given list of integers has some consecutive duplicate entries and it is required to remove those duplicates and to keep just one entry of that integer. This can be done in Haskell programming language using foldr or foldl functions. It can also be done without using any fold functions. Here is the code for the same.
Without fold function
remdups :: [Int] -> [Int]
remdups [] = []
remdups [x] = [x]
remdups (x1:x2:xs)
| x1==x2 = remdups (x2:xs)
| otherwise = x1:remdups (x2:xs)
With foldr function
fnr :: (Eq a) => a -> [a] -> [a]
fnr x [] = [x]
fnr x xs
| x == head xs = xs
| otherwise = x:xs
remdups1 :: (Eq a) => [a] -> [a]
remdups1 [] = []
remdups1 ys = foldr fnr [] ys
With foldl function
fnl :: (Eq a) => [a] -> a -> [a]
fnl [] x = [x]
fnl xs x
| last xs == x = xs
| otherwise = xs ++ [x]
remdups2 :: (Eq a) => [a] -> [a]
remdups2 [] = []
remdups2 ys = foldl fnl [] ys
The output of the above codes will look like this…
*Main> remdups [1,2,2,1,3,3,4,1,2,2]
[1,2,1,3,4,1,2]
*Main> remdups1 [1,2,2,1,3,3,4,1,2,2]
[1,2,1,3,4,1,2]
*Main> remdups2 [1,2,2,1,3,3,4,1,2,2]
[1,2,1,3,4,1,2]