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
20 #include "HsVersions.h"
22 import Var ( Var, Id )
24 import Util ( zipEqual )
28 %************************************************************************
30 \subsection{@VarEnv@s}
32 %************************************************************************
35 type VarEnv elt = UniqFM elt
36 type IdEnv elt = VarEnv elt
37 type TyVarEnv elt = VarEnv elt
39 emptyVarEnv :: VarEnv a
40 mkVarEnv :: [(Var fs ft, a)] -> VarEnv a
41 zipVarEnv :: [Var fs ft] -> [a] -> VarEnv a
42 unitVarEnv :: Var fs ft -> a -> VarEnv a
43 extendVarEnv :: VarEnv a -> Var fs ft -> a -> VarEnv a
44 plusVarEnv :: VarEnv a -> VarEnv a -> VarEnv a
45 extendVarEnvList :: VarEnv a -> [(Var fs ft, a)] -> VarEnv a
47 delVarEnvList :: VarEnv a -> [Var fs ft] -> VarEnv a
48 delVarEnv :: VarEnv a -> Var fs ft -> VarEnv a
49 plusVarEnv_C :: (a -> a -> a) -> VarEnv a -> VarEnv a -> VarEnv a
50 mapVarEnv :: (a -> b) -> VarEnv a -> VarEnv b
51 modifyVarEnv :: (a -> a) -> VarEnv a -> Var fs ft -> VarEnv a
52 rngVarEnv :: VarEnv a -> [a]
54 isEmptyVarEnv :: VarEnv a -> Bool
55 lookupVarEnv :: VarEnv a -> Var fs ft -> Maybe a
56 lookupVarEnv_NF :: VarEnv a -> Var fs ft -> a
57 elemVarEnv :: Var fs ft -> VarEnv a -> Bool
58 foldVarEnv :: (a -> b -> b) -> b -> VarEnv a -> b
63 extendVarEnv = addToUFM
64 plusVarEnv_C = plusUFM_C
65 delVarEnvList = delListFromUFM
66 delVarEnv = delFromUFM
68 lookupVarEnv = lookupUFM
71 emptyVarEnv = emptyUFM
74 isEmptyVarEnv = isNullUFM
77 zipVarEnv tyvars tys = listToUFM (zipEqual "zipVarEnv" tyvars tys)
78 extendVarEnvList env pairs = plusUFM env (listToUFM pairs)
79 lookupVarEnv_NF env id = case (lookupVarEnv env id) of { Just xx -> xx }
82 @modifyVarEnv@: Look up a thing in the VarEnv,
83 then mash it with the modify function, and put it back.
86 modifyVarEnv mangle_fn env key
87 = case (lookupVarEnv env key) of
89 Just xx -> extendVarEnv env key (mangle_fn xx)
91 modifyVarEnv_Directly mangle_fn env key
92 = case (lookupUFM_Directly env key) of
94 Just xx -> addToUFM_Directly env key (mangle_fn xx)