/compiler/utils/UniqSet.lhs
http://github.com/ilyasergey/GHC-XAppFix · Haskell · 122 lines · 91 code · 23 blank · 8 comment · 0 complexity · 823366f92adda0a58e5d4fcba24e99eb MD5 · raw file
- %
- % (c) The University of Glasgow 2006
- % (c) The AQUA Project, Glasgow University, 1994-1998
- %
- \section[UniqSet]{Specialised sets, for things with @Uniques@}
- Based on @UniqFMs@ (as you would expect).
- Basically, the things need to be in class @Uniquable@.
- \begin{code}
- {-# OPTIONS -fno-warn-tabs #-}
- -- The above warning supression flag is a temporary kludge.
- -- While working on this module you are encouraged to remove it and
- -- detab the module (please do the detabbing in a separate patch). See
- -- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#TabsvsSpaces
- -- for details
- module UniqSet (
- -- * Unique set type
- UniqSet, -- type synonym for UniqFM a
- -- ** Manipulating these sets
- emptyUniqSet,
- unitUniqSet,
- mkUniqSet,
- addOneToUniqSet, addOneToUniqSet_C, addListToUniqSet,
- delOneFromUniqSet, delOneFromUniqSet_Directly, delListFromUniqSet,
- unionUniqSets, unionManyUniqSets,
- minusUniqSet,
- intersectUniqSets,
- foldUniqSet,
- mapUniqSet,
- elementOfUniqSet,
- elemUniqSet_Directly,
- filterUniqSet,
- sizeUniqSet,
- isEmptyUniqSet,
- lookupUniqSet,
- uniqSetToList,
- ) where
- import UniqFM
- import Unique
- \end{code}
- %************************************************************************
- %* *
- \subsection{The signature of the module}
- %* *
- %************************************************************************
- \begin{code}
- emptyUniqSet :: UniqSet a
- unitUniqSet :: Uniquable a => a -> UniqSet a
- mkUniqSet :: Uniquable a => [a] -> UniqSet a
- addOneToUniqSet :: Uniquable a => UniqSet a -> a -> UniqSet a
- addOneToUniqSet_C :: Uniquable a => (a -> a -> a) -> UniqSet a -> a -> UniqSet a
- addListToUniqSet :: Uniquable a => UniqSet a -> [a] -> UniqSet a
- delOneFromUniqSet :: Uniquable a => UniqSet a -> a -> UniqSet a
- delOneFromUniqSet_Directly :: Uniquable a => UniqSet a -> Unique -> UniqSet a
- delListFromUniqSet :: Uniquable a => UniqSet a -> [a] -> UniqSet a
- unionUniqSets :: UniqSet a -> UniqSet a -> UniqSet a
- unionManyUniqSets :: [UniqSet a] -> UniqSet a
- minusUniqSet :: UniqSet a -> UniqSet a -> UniqSet a
- intersectUniqSets :: UniqSet a -> UniqSet a -> UniqSet a
- foldUniqSet :: (a -> b -> b) -> b -> UniqSet a -> b
- mapUniqSet :: (a -> b) -> UniqSet a -> UniqSet b
- elementOfUniqSet :: Uniquable a => a -> UniqSet a -> Bool
- elemUniqSet_Directly :: Unique -> UniqSet a -> Bool
- filterUniqSet :: (a -> Bool) -> UniqSet a -> UniqSet a
- sizeUniqSet :: UniqSet a -> Int
- isEmptyUniqSet :: UniqSet a -> Bool
- lookupUniqSet :: Uniquable a => UniqSet a -> a -> Maybe a
- uniqSetToList :: UniqSet a -> [a]
- \end{code}
- %************************************************************************
- %* *
- \subsection{Implementation using ``UniqFM''}
- %* *
- %************************************************************************
- \begin{code}
- type UniqSet a = UniqFM a
- emptyUniqSet = emptyUFM
- unitUniqSet x = unitUFM x x
- mkUniqSet = foldl addOneToUniqSet emptyUniqSet
- addOneToUniqSet set x = addToUFM set x x
- addOneToUniqSet_C f set x = addToUFM_C f set x x
- addListToUniqSet = foldl addOneToUniqSet
- delOneFromUniqSet = delFromUFM
- delOneFromUniqSet_Directly = delFromUFM_Directly
- delListFromUniqSet = delListFromUFM
- unionUniqSets = plusUFM
- unionManyUniqSets [] = emptyUniqSet
- unionManyUniqSets sets = foldr1 unionUniqSets sets
- minusUniqSet = minusUFM
- intersectUniqSets = intersectUFM
- foldUniqSet = foldUFM
- mapUniqSet = mapUFM
- elementOfUniqSet = elemUFM
- elemUniqSet_Directly = elemUFM_Directly
- filterUniqSet = filterUFM
- sizeUniqSet = sizeUFM
- isEmptyUniqSet = isNullUFM
- lookupUniqSet = lookupUFM
- uniqSetToList = eltsUFM
- \end{code}