1{-# LANGUAGE CPP #-}
2module Map (
3   Map,
4   member, lookup, findWithDefault,
5   empty,
6   insert, insertWith,
7   delete,
8   union, unionWith, unions,
9   mapWithKey,
10   elems,
11   fromList, fromListWith,
12   toAscList
13) where
14
15#if __GLASGOW_HASKELL__ >= 603
16import Data.Map
17import Prelude ()
18#else
19import Data.FiniteMap
20import Prelude hiding ( lookup )
21
22type Map k a = FiniteMap k a
23
24member :: Ord k => k -> Map k a -> Bool
25member = elemFM
26
27lookup :: Ord k => k -> Map k a -> Maybe a
28lookup = flip lookupFM
29
30findWithDefault :: Ord k => a -> k -> Map k a -> a
31findWithDefault a k m = lookupWithDefaultFM m a k
32
33empty :: Map k a
34empty = emptyFM
35
36insert :: Ord k => k -> a -> Map k a -> Map k a
37insert k a m = addToFM m k a
38
39insertWith :: Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
40insertWith c k a m = addToFM_C c m k a
41
42delete :: Ord k => k -> Map k a -> Map k a
43delete = flip delFromFM
44
45union :: Ord k => Map k a -> Map k a -> Map k a
46union = flip plusFM
47
48unionWith :: Ord k => (a -> a -> a) -> Map k a -> Map k a -> Map k a
49unionWith c l r = plusFM_C c r l
50
51unions :: Ord k => [Map k a] -> Map k a
52unions = foldl (flip plusFM) emptyFM
53
54mapWithKey :: (k -> a -> b) -> Map k a -> Map k b
55mapWithKey = mapFM
56
57elems :: Map k a -> [a]
58elems = eltsFM
59
60fromList :: Ord k => [(k,a)] -> Map k a
61fromList = listToFM
62
63fromListWith :: Ord k => (a -> a -> a) -> [(k,a)] -> Map k a
64fromListWith c = addListToFM_C (flip c) emptyFM
65
66toAscList :: Map k a -> [(k,a)]
67toAscList = fmToList
68#endif
69