diff options
Diffstat (limited to 'src/Map.hs')
-rw-r--r-- | src/Map.hs | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/Map.hs b/src/Map.hs new file mode 100644 index 00000000..4209798b --- /dev/null +++ b/src/Map.hs @@ -0,0 +1,64 @@ +module Map ( + Map, + member, lookup, findWithDefault, + empty, + insert, insertWith, + union, unionWith, unions, + elems, + fromList, fromListWith, + toAscList +) where + +import Prelude hiding ( lookup ) +import qualified Set + +#if __GLASGOW_HASKELL__ < 503 +import FiniteMap +#elif __GLASGOW_HASKELL__ < 603 +import Data.FiniteMap +#else +import Data.Map +#endif + +#if __GLASGOW_HASKELL__ < 603 +type Map k a = FiniteMap k a + +member :: Ord k => k -> Map k a -> Bool +member = elemFM + +lookup :: Ord k => k -> Map k a -> Maybe a +lookup = flip lookupFM + +findWithDefault :: Ord k => a -> k -> Map k a -> a +findWithDefault a k m = lookupWithDefaultFM m a k + +empty :: Map k a +empty = emptyFM + +insert :: Ord k => k -> a -> Map k a -> Map k a +insert k a m = addToFM m k a + +insertWith :: Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a +insertWith c k a m = addToFM_C c m k a + +union :: Ord k => Map k a -> Map k a -> Map k a +union = flip plusFM + +unionWith :: Ord k => (a -> a -> a) -> Map k a -> Map k a -> Map k a +unionWith c l r = plusFM_C c r l + +unions :: Ord k => [Map k a] -> Map k a +unions = foldr plusFM emptyFM + +elems :: Map k a -> [a] +elems = eltsFM + +fromList :: Ord k => [(k,a)] -> Map k a +fromList = listToFM + +fromListWith :: Ord k => (a -> a -> a) -> [(k,a)] -> Map k a +fromListWith = flip addListToFM_C emptyFM + +toAscList :: Map k a -> [(k,a)] +toAscList = fmToList +#endif |