X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FFiniteMap.hs;h=8bafafce1d349c15afb854c48962c4d888691a00;hb=28fb12f4e4059674e9396fc76a2783e0ae8798cd;hp=44d243798c474270ed9488352223f4caf9cce425;hpb=dd0c4724a43d16642921218f02a10f4bfcecaf05;p=ghc-base.git diff --git a/Data/FiniteMap.hs b/Data/FiniteMap.hs index 44d2437..8bafafc 100644 --- a/Data/FiniteMap.hs +++ b/Data/FiniteMap.hs @@ -8,6 +8,8 @@ -- Stability : provisional -- Portability : portable -- +-- NOTE: Data.FiniteMap is DEPRECATED, please use "Data.Map" instead. +-- -- A finite map implementation, derived from the paper: -- /Efficient sets: a balancing act/, S. Adams, -- Journal of functional programming 3(4) Oct 1993, pp553-562 @@ -38,7 +40,9 @@ #define OUTPUTABLE_key {--} #endif -module Data.FiniteMap ( +module Data.FiniteMap + {-# DEPRECATED "Please use Data.Map instead." #-} + ( -- * The @FiniteMap@ type FiniteMap, -- abstract type @@ -84,9 +88,14 @@ module Data.FiniteMap ( #endif ) where +import Prelude -- necessary to get dependencies right + import Data.Maybe ( isJust ) #ifdef __GLASGOW_HASKELL__ import GHC.Base +import Data.Typeable +import Data.Generics.Basics +import Data.Generics.Instances #endif #ifdef __HADDOCK__ @@ -115,6 +124,7 @@ import Bag ( foldBag ) #endif /* not GHC */ + -- --------------------------------------------------------------------------- -- The signature of the module @@ -180,14 +190,14 @@ plusFM_C :: (Ord key OUTPUTABLE_key) => (elt -> elt -> elt) -> FiniteMap key elt -> FiniteMap key elt -> FiniteMap key elt -- | @(minusFM a1 a2)@ deletes from @a1@ any mappings which are bound in @a2@ -minusFM :: (Ord key OUTPUTABLE_key) => FiniteMap key elt -> FiniteMap key elt -> FiniteMap key elt +minusFM :: (Ord key OUTPUTABLE_key) => FiniteMap key elt1 -> FiniteMap key elt2 -> FiniteMap key elt1 -- | @(intersectFM a1 a2)@ returns a new 'FiniteMap' containing -- mappings from @a1@ for which @a2@ also has a mapping with the same -- key. intersectFM :: (Ord key OUTPUTABLE_key) => FiniteMap key elt -> FiniteMap key elt -> FiniteMap key elt --- | Returns the interesction of two mappings, using the specified +-- | Returns the intersection of two mappings, using the specified -- combination function to combine values. intersectFM_C :: (Ord key OUTPUTABLE_key) => (elt1 -> elt2 -> elt3) -> FiniteMap key elt1 -> FiniteMap key elt2 -> FiniteMap key elt3 @@ -280,6 +290,26 @@ bagToFM = foldBag plusFM (\ (k,v) -> unitFM k v) emptyFM instance (Show k, Show e) => Show (FiniteMap k e) where showsPrec p m = showsPrec p (fmToList m) +instance Functor (FiniteMap k) where + fmap f = mapFM (const f) + +#if __GLASGOW_HASKELL__ + +#include "Typeable.h" +INSTANCE_TYPEABLE2(FiniteMap,arrayTc,"FiniteMap") + +-- This instance preserves data abstraction at the cost of inefficiency. +-- We omit reflection services for the sake of data abstraction. + +instance (Data a, Data b, Ord a) => Data (FiniteMap a b) where + gfoldl f z fm = z listToFM `f` (fmToList fm) + toConstr _ = error "toConstr" + gunfold _ _ = error "gunfold" + dataTypeOf _ = mkNorepType "Data.FiniteMap.FiniteMap" + +#endif + + -- --------------------------------------------------------------------------- -- Adding to and deleting from @FiniteMaps@