[project @ 2003-02-04 12:23:32 by simonpj]
[ghc-hetmet.git] / ghc / compiler / basicTypes / VarEnv.lhs
index fcf64f1..d219fe5 100644 (file)
@@ -8,7 +8,7 @@ module VarEnv (
        VarEnv, IdEnv, TyVarEnv,
        emptyVarEnv, unitVarEnv, mkVarEnv,
        elemVarEnv, rngVarEnv,
-       extendVarEnv, extendVarEnvList,
+       extendVarEnv, extendVarEnv_C, extendVarEnvList,
        plusVarEnv, plusVarEnv_C,
        delVarEnvList, delVarEnv,
        lookupVarEnv, lookupVarEnv_NF, lookupWithDefaultVarEnv,
@@ -21,7 +21,7 @@ module VarEnv (
 
        -- SubstEnvs
        SubstEnv, TyVarSubstEnv, SubstResult(..),
-       emptySubstEnv, 
+       emptySubstEnv, substEnvEnv, elemSubstEnv,
        mkSubstEnv, lookupSubstEnv, extendSubstEnv, extendSubstEnvList,
        delSubstEnv, delSubstEnvList, noTypeSubst, isEmptySubstEnv
     ) where
@@ -50,6 +50,8 @@ When tidying up print names, we keep a mapping of in-scope occ-names
 
 \begin{code}
 type TidyEnv = (TidyOccEnv, VarEnv Var)
+
+emptyTidyEnv :: TidyEnv
 emptyTidyEnv = (emptyTidyOccEnv, emptyVarEnv)
 \end{code}
 
@@ -72,6 +74,9 @@ data SubstEnv      = SE (VarEnv SubstResult)
 noTypeSubst :: SubstEnv -> Bool
 noTypeSubst (SE _ nt) = nt
 
+substEnvEnv :: SubstEnv -> VarEnv SubstResult
+substEnvEnv (SE env _) = env
+
 type TyVarSubstEnv = SubstEnv  -- of the form (DoneTy ty) *only*
 
 data SubstResult
@@ -90,6 +95,9 @@ isEmptySubstEnv (SE s _) = isEmptyVarEnv s
 lookupSubstEnv :: SubstEnv -> Var -> Maybe SubstResult
 lookupSubstEnv (SE s _) v = lookupVarEnv s v
 
+elemSubstEnv :: Var -> SubstEnv -> Bool
+elemSubstEnv v (SE s _) = elemVarEnv v s
+
 extendSubstEnv :: SubstEnv -> Var -> SubstResult -> SubstEnv
 extendSubstEnv (SE s nt) v r = SE (extendVarEnv s v r) (noTys r nt)
 
@@ -124,6 +132,7 @@ mkVarEnv      :: [(Var, a)] -> VarEnv a
 zipVarEnv        :: [Var] -> [a] -> VarEnv a
 unitVarEnv       :: Var -> a -> VarEnv a
 extendVarEnv     :: VarEnv a -> Var -> a -> VarEnv a
+extendVarEnv_C   :: (a->a->a) -> VarEnv a -> Var -> a -> VarEnv a
 plusVarEnv       :: VarEnv a -> VarEnv a -> VarEnv a
 extendVarEnvList  :: VarEnv a -> [(Var, a)] -> VarEnv a
                  
@@ -145,6 +154,7 @@ foldVarEnv    :: (a -> b -> b) -> b -> VarEnv a -> b
 \begin{code}
 elemVarEnv       = elemUFM
 extendVarEnv    = addToUFM
+extendVarEnv_C  = addToUFM_C
 extendVarEnvList = addListToUFM
 plusVarEnv_C    = plusUFM_C
 delVarEnvList   = delListFromUFM