[project @ 1996-05-06 11:01:29 by partain]
[ghc-hetmet.git] / ghc / compiler / utils / FiniteMap.lhs
index 87da3e0..384a7d1 100644 (file)
@@ -38,26 +38,30 @@ module FiniteMap (
 
        emptyFM, unitFM, listToFM,
 
-       addToFM,   addListToFM,
-       IF_NOT_GHC(addToFM_C COMMA)
+       addToFM,
+       addToFM_C,
+       addListToFM,
        addListToFM_C,
        IF_NOT_GHC(delFromFM COMMA)
        delListFromFM,
 
-       plusFM,      plusFM_C,
-       IF_NOT_GHC(intersectFM COMMA intersectFM_C COMMA)
-       minusFM, -- exported for GHCI only
+       plusFM,
+       plusFM_C,
+       minusFM,
+       foldFM,
 
-       IF_NOT_GHC(mapFM COMMA foldFM COMMA filterFM COMMA)
+       IF_NOT_GHC(intersectFM COMMA)
+       IF_NOT_GHC(intersectFM_C COMMA)
+       IF_NOT_GHC(mapFM COMMA filterFM COMMA)
 
-       IF_NOT_GHC(sizeFM COMMA)
-       isEmptyFM, elemFM, lookupFM, lookupWithDefaultFM,
+       sizeFM, isEmptyFM, elemFM, lookupFM, lookupWithDefaultFM,
 
-       fmToList, keysFM, eltsFM{-used in GHCI-}
+       fmToList, keysFM, eltsFM
 
 #ifdef COMPILING_GHC
+       , bagToFM
        , FiniteSet(..), emptySet, mkSet, isEmptySet
-       , elementOf, setToList, union, minusSet{-exported for GHCI-}
+       , elementOf, setToList, union, minusSet
 #endif
 
        -- To make it self-sufficient
@@ -73,6 +77,7 @@ import Ubiq{-uitous-}
 # ifdef DEBUG
 import Pretty
 # endif
+import Bag     ( foldBag )
 #if ! OMIT_NATIVE_CODEGEN
 #define IF_NCG(a) a
 #else
@@ -98,9 +103,13 @@ import Pretty
 \begin{code}
 --     BUILDING
 emptyFM                :: FiniteMap key elt
-unitFM :: key -> elt -> FiniteMap key elt
+unitFM         :: key -> elt -> FiniteMap key elt
 listToFM       :: (Ord key OUTPUTABLE_key) => [(key,elt)] -> FiniteMap key elt
                        -- In the case of duplicates, the last is taken
+#ifdef COMPILING_GHC
+bagToFM                :: (Ord key OUTPUTABLE_key) => Bag (key,elt) -> FiniteMap key elt
+                       -- In the case of duplicates, who knows which is taken
+#endif
 
 --     ADDING AND DELETING
                   -- Throws away any previous binding
@@ -203,7 +212,11 @@ emptyFM
 
 unitFM key elt = Branch key elt IF_GHC(1#,1) emptyFM emptyFM
 
-listToFM key_elt_pairs = addListToFM emptyFM key_elt_pairs
+listToFM = addListToFM emptyFM
+
+#ifdef COMPILING_GHC
+bagToFM = foldBag plusFM (\ (k,v) -> unitFM k v) emptyFM
+#endif
 \end{code}
 
 %************************************************************************