1-- Some extra functions to extend Data.Map
2
3module FiniteMap (
4        insertList,
5        insertListWith,
6        deleteList,
7        foldRight, foldRightWithKey
8    ) where
9
10import GhcPrelude
11
12import Data.Map (Map)
13import qualified Data.Map as Map
14
15insertList :: Ord key => [(key,elt)] -> Map key elt -> Map key elt
16insertList xs m = foldl' (\m (k, v) -> Map.insert k v m) m xs
17
18insertListWith :: Ord key
19               => (elt -> elt -> elt)
20               -> [(key,elt)]
21               -> Map key elt
22               -> Map key elt
23insertListWith f xs m0 = foldl' (\m (k, v) -> Map.insertWith f k v m) m0 xs
24
25deleteList :: Ord key => [key] -> Map key elt -> Map key elt
26deleteList ks m = foldl' (flip Map.delete) m ks
27
28foldRight        :: (elt -> a -> a) -> a -> Map key elt -> a
29foldRight        = Map.foldr
30foldRightWithKey :: (key -> elt -> a -> a) -> a -> Map key elt -> a
31foldRightWithKey = Map.foldrWithKey
32