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
# ifdef DEBUG
import Pretty
# endif
+import Bag ( foldBag )
#if ! OMIT_NATIVE_CODEGEN
#define IF_NCG(a) a
#else
\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
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}
%************************************************************************