2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section{@VarEnvs@: Variable environments}
8 VarEnv, IdEnv, TyVarEnv,
9 emptyVarEnv, unitVarEnv, mkVarEnv,
10 elemVarEnv, rngVarEnv,
11 extendVarEnv, extendVarEnvList,
12 plusVarEnv, plusVarEnv_C,
13 delVarEnvList, delVarEnv,
14 lookupVarEnv, lookupVarEnv_NF,
16 modifyVarEnv, modifyVarEnv_Directly,
17 isEmptyVarEnv, foldVarEnv,
22 #include "HsVersions.h"
24 import OccName ( TidyOccEnv, emptyTidyOccEnv )
25 import Var ( Var, Id, IdOrTyVar )
27 import Util ( zipEqual )
31 %************************************************************************
35 %************************************************************************
37 When tidying up print names, we keep a mapping of in-scope occ-names
38 (the TidyOccEnv) and a Var-to-Var of the current renamings.
41 type TidyEnv = (TidyOccEnv, VarEnv IdOrTyVar)
42 emptyTidyEnv = (emptyTidyOccEnv, emptyVarEnv)
46 %************************************************************************
48 \subsection{@VarEnv@s}
50 %************************************************************************
53 type VarEnv elt = UniqFM elt
54 type IdEnv elt = VarEnv elt
55 type TyVarEnv elt = VarEnv elt
57 emptyVarEnv :: VarEnv a
58 mkVarEnv :: [(Var, a)] -> VarEnv a
59 zipVarEnv :: [Var] -> [a] -> VarEnv a
60 unitVarEnv :: Var -> a -> VarEnv a
61 extendVarEnv :: VarEnv a -> Var -> a -> VarEnv a
62 plusVarEnv :: VarEnv a -> VarEnv a -> VarEnv a
63 extendVarEnvList :: VarEnv a -> [(Var, a)] -> VarEnv a
65 delVarEnvList :: VarEnv a -> [Var] -> VarEnv a
66 delVarEnv :: VarEnv a -> Var -> VarEnv a
67 plusVarEnv_C :: (a -> a -> a) -> VarEnv a -> VarEnv a -> VarEnv a
68 mapVarEnv :: (a -> b) -> VarEnv a -> VarEnv b
69 modifyVarEnv :: (a -> a) -> VarEnv a -> Var -> VarEnv a
70 rngVarEnv :: VarEnv a -> [a]
72 isEmptyVarEnv :: VarEnv a -> Bool
73 lookupVarEnv :: VarEnv a -> Var -> Maybe a
74 lookupVarEnv_NF :: VarEnv a -> Var -> a
75 elemVarEnv :: Var -> VarEnv a -> Bool
76 foldVarEnv :: (a -> b -> b) -> b -> VarEnv a -> b
81 extendVarEnv = addToUFM
82 plusVarEnv_C = plusUFM_C
83 delVarEnvList = delListFromUFM
84 delVarEnv = delFromUFM
86 lookupVarEnv = lookupUFM
89 emptyVarEnv = emptyUFM
92 isEmptyVarEnv = isNullUFM
95 zipVarEnv tyvars tys = listToUFM (zipEqual "zipVarEnv" tyvars tys)
96 extendVarEnvList env pairs = plusUFM env (listToUFM pairs)
97 lookupVarEnv_NF env id = case (lookupVarEnv env id) of { Just xx -> xx }
100 @modifyVarEnv@: Look up a thing in the VarEnv,
101 then mash it with the modify function, and put it back.
104 modifyVarEnv mangle_fn env key
105 = case (lookupVarEnv env key) of
107 Just xx -> extendVarEnv env key (mangle_fn xx)
109 modifyVarEnv_Directly mangle_fn env key
110 = case (lookupUFM_Directly env key) of
112 Just xx -> addToUFM_Directly env key (mangle_fn xx)