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, lookupWithDefaultVarEnv,
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 lookupWithDefaultVarEnv :: VarEnv a -> a -> Var -> a
76 elemVarEnv :: Var -> VarEnv a -> Bool
77 foldVarEnv :: (a -> b -> b) -> b -> VarEnv a -> b
82 extendVarEnv = addToUFM
83 plusVarEnv_C = plusUFM_C
84 delVarEnvList = delListFromUFM
85 delVarEnv = delFromUFM
87 lookupVarEnv = lookupUFM
88 lookupWithDefaultVarEnv = lookupWithDefaultUFM
91 emptyVarEnv = emptyUFM
94 isEmptyVarEnv = isNullUFM
97 zipVarEnv tyvars tys = listToUFM (zipEqual "zipVarEnv" tyvars tys)
98 extendVarEnvList env pairs = plusUFM env (listToUFM pairs)
99 lookupVarEnv_NF env id = case (lookupVarEnv env id) of { Just xx -> xx }
102 @modifyVarEnv@: Look up a thing in the VarEnv,
103 then mash it with the modify function, and put it back.
106 modifyVarEnv mangle_fn env key
107 = case (lookupVarEnv env key) of
109 Just xx -> extendVarEnv env key (mangle_fn xx)
111 modifyVarEnv_Directly mangle_fn env key
112 = case (lookupUFM_Directly env key) of
114 Just xx -> addToUFM_Directly env key (mangle_fn xx)