summaryrefslogtreecommitdiff
path: root/compiler/GHC/Data/FiniteMap.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/Data/FiniteMap.hs')
-rw-r--r--compiler/GHC/Data/FiniteMap.hs31
1 files changed, 31 insertions, 0 deletions
diff --git a/compiler/GHC/Data/FiniteMap.hs b/compiler/GHC/Data/FiniteMap.hs
new file mode 100644
index 0000000000..055944d320
--- /dev/null
+++ b/compiler/GHC/Data/FiniteMap.hs
@@ -0,0 +1,31 @@
+-- Some extra functions to extend Data.Map
+
+module GHC.Data.FiniteMap (
+ insertList,
+ insertListWith,
+ deleteList,
+ foldRight, foldRightWithKey
+ ) where
+
+import GHC.Prelude
+
+import Data.Map (Map)
+import qualified Data.Map as Map
+
+insertList :: Ord key => [(key,elt)] -> Map key elt -> Map key elt
+insertList xs m = foldl' (\m (k, v) -> Map.insert k v m) m xs
+
+insertListWith :: Ord key
+ => (elt -> elt -> elt)
+ -> [(key,elt)]
+ -> Map key elt
+ -> Map key elt
+insertListWith f xs m0 = foldl' (\m (k, v) -> Map.insertWith f k v m) m0 xs
+
+deleteList :: Ord key => [key] -> Map key elt -> Map key elt
+deleteList ks m = foldl' (flip Map.delete) m ks
+
+foldRight :: (elt -> a -> a) -> a -> Map key elt -> a
+foldRight = Map.foldr
+foldRightWithKey :: (key -> elt -> a -> a) -> a -> Map key elt -> a
+foldRightWithKey = Map.foldrWithKey