{-# OPTIONS -cpp #-} module Map ( Map, empty, singleton, lookup, findWithDefault, insert, union, unionWith, map, fromList, toList ) where import Prelude hiding (lookup, map) #if __GLASGOW_HASKELL__ >= 603 || !__GLASGOW_HASKELL__ import Data.Map #else import Data.FiniteMap type Map k a = FiniteMap k a empty :: Map k a empty = emptyFM singleton :: k -> a -> Map k a singleton = unitFM 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 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 (flip 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 (flip c) r l map :: (a -> b) -> Map k a -> Map k b map f = mapFM (\_ -> f) fromList :: Ord k => [(k,a)] -> Map k a fromList = listToFM toList :: Map k a -> [(k, a)] toList = fmToList #endif