module Data.List.IdMap where import Data.IdMap import qualified Data.List as List import Data.Maybe ----------------------------------------------------------------------------------- nubId :: I m => Set m a -> [Id a] -> (Set m a, [Id a]) nubId s [] = (s, []) nubId s (h:t) | h `member` s = nubId s t | otherwise = h `add` nubId (setInsert h s) t where add :: a -> (b, [a]) -> (b, [a]) x `add` ~(s, xs) = (s, x:xs) fromList' :: I m => Map m a [b] -> [(Id a, b)] -> Map m a [b] fromList' = List.foldl' f where f m (a,b) = case lookUp a m of Nothing -> insert a [b] m Just bs -> insert a (b:bs) m