練習問題 4.5.5

remdups
はリストから隣接する重複を取り除く関数である.たとえば,
remdups [1,2,2,3,3,3,1,1] = [1,2,3,1]
である.
remdups
foldr
を使って定義せよ.また,
foldl
を使っても定義してみよ.



remdup  ::  Eq a => [a] -> [a]
remdup = foldr f []
  where  f x []                    = [x]
         f x yys@(y:_) | x == y    = yys
                       | otherwise = x:yys
remdup' :: Eq a => [a] -> [a]
remdup' = reverse . foldl g []
  where  g []        z             = [z]
         g yys@(y:_) z | y == z    = yys
                       | otherwise = z:yys