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