%
+% (c) The University of Glasgow 2006
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
-\section{@VarSet@: Variable sets}
\begin{code}
module VarSet (
+ -- * Var, Id and TyVar set types
VarSet, IdSet, TyVarSet,
+
+ -- ** Manipulating these sets
emptyVarSet, unitVarSet, mkVarSet,
extendVarSet, extendVarSetList, extendVarSet_C,
elemVarSet, varSetElems, subVarSet,
unionVarSet, unionVarSets,
intersectVarSet, intersectsVarSet, disjointVarSet,
isEmptyVarSet, delVarSet, delVarSetList, delVarSetByKey,
- minusVarSet, foldVarSet, filterVarSet,
+ minusVarSet, foldVarSet, filterVarSet, fixVarSet,
lookupVarSet, mapVarSet, sizeVarSet, seqVarSet,
elemVarSetByKey
) where
#include "HsVersions.h"
-import Var ( Var, Id, TyVar )
-import Unique ( Unique )
+import Var ( Var, TyVar, Id )
+import Unique
import UniqSet
-import UniqFM ( delFromUFM_Directly, addToUFM_C )
\end{code}
%************************************************************************
delVarSetByKey :: VarSet -> Unique -> VarSet
elemVarSetByKey :: Unique -> VarSet -> Bool
+fixVarSet :: (VarSet -> VarSet) -> VarSet -> VarSet
emptyVarSet = emptyUniqSet
unitVarSet = unitUniqSet
mapVarSet = mapUniqSet
sizeVarSet = sizeUniqSet
filterVarSet = filterUniqSet
-extendVarSet_C combine s x = addToUFM_C combine s x x
-delVarSetByKey = delFromUFM_Directly -- Can't be bothered to add this to UniqSet
+extendVarSet_C = addOneToUniqSet_C
+delVarSetByKey = delOneFromUniqSet_Directly
elemVarSetByKey = elemUniqSet_Directly
\end{code}
intersectsVarSet s1 s2 = not (s1 `disjointVarSet` s2)
disjointVarSet s1 s2 = isEmptyVarSet (s1 `intersectVarSet` s2)
subVarSet s1 s2 = isEmptyVarSet (s1 `minusVarSet` s2)
+
+-- Iterate f to a fixpoint
+fixVarSet f s | new_s `subVarSet` s = s
+ | otherwise = fixVarSet f new_s
+ where
+ new_s = f s
\end{code}
\begin{code}