2 % (c) The AQUA Project, Glasgow University, 1995
4 \section[IdEnv]{Lookup tables that have @Id@ keys}
6 An interface to the @FiniteMap@ machinery, which exports
7 a ``personality'' the same as that of the old @IdEnv@ module.
10 #include "HsVersions.h"
13 IdEnv(..), -- abstract: NOT
15 lookupIdEnv, lookupNoFailIdEnv,
16 nullIdEnv, unitIdEnv, mkIdEnv, growIdEnv, growIdEnvList,
19 delOneFromIdEnv, delManyFromIdEnv, --UNUSED: minusIdEnv,
20 modifyIdEnv, combineIdEnvs,
23 -- UNUSED: filterIdEnv,
25 -- and to make the interface self-sufficient...
29 -- and for pragma-friendliness...
30 #ifdef USE_ATTACK_PRAGMAS
31 , addToUFM, plusUFM_C, delListFromUFM, delFromUFM, plusUFM,
32 lookupUFM, mapUFM, filterUFM, minusUFM, listToUFM, emptyUFM,
33 eltsUFM, singletonUFM,
41 import Maybes ( Maybe(..), MaybeErr(..) )
43 import Unique ( Unique, u2i )
48 type IdEnv elt = UniqFM elt
53 addOneToIdEnv :: IdEnv a -> Id -> a -> IdEnv a
54 combineIdEnvs :: (a -> a -> a) -> IdEnv a -> IdEnv a -> IdEnv a
55 delManyFromIdEnv :: IdEnv a -> [Id] -> IdEnv a
56 delOneFromIdEnv :: IdEnv a -> Id -> IdEnv a
57 growIdEnv :: IdEnv a -> IdEnv a -> IdEnv a
58 growIdEnvList :: IdEnv a -> [(Id, a)] -> IdEnv a
59 isNullIdEnv :: IdEnv a -> Bool
60 lookupIdEnv :: IdEnv a -> Id -> Maybe a
61 lookupNoFailIdEnv :: IdEnv a -> Id -> a
62 mapIdEnv :: (a -> b) -> IdEnv a -> IdEnv b
63 --filterIdEnv :: (a -> Bool) -> IdEnv a -> IdEnv a
64 --minusIdEnv :: IdEnv a -> IdEnv a -> IdEnv a
65 mkIdEnv :: [(Id, a)] -> IdEnv a
66 modifyIdEnv :: IdEnv a -> (a -> a) -> Id -> IdEnv a
68 rngIdEnv :: IdEnv a -> [a]
69 unitIdEnv :: Id -> a -> IdEnv a
73 addOneToIdEnv env id elt = addToUFM env id elt
75 combineIdEnvs combiner env1 env2 = plusUFM_C combiner env1 env2
77 delManyFromIdEnv env ids = delListFromUFM env ids
79 delOneFromIdEnv env id = delFromUFM env id
81 growIdEnv old_env new_stuff = plusUFM old_env new_stuff
83 growIdEnvList old_env pairs = plusUFM old_env (listToUFM pairs)
85 isNullIdEnv env = sizeUFM env == 0
87 lookupIdEnv env id = lookupUFM env id
89 lookupNoFailIdEnv env id = case (lookupIdEnv env id) of { Just xx -> xx }
91 mapIdEnv f env = mapUFM f env
94 filterIdEnv p env = filterUFM p env
95 minusIdEnv env1 env2 = minusUFM env1 env2
98 mkIdEnv stuff = listToUFM stuff
100 -- modifyIdEnv: Look up a thing in the IdEnv, then mash it with the
101 -- modify function, and put it back.
103 modifyIdEnv env mangle_fn key
104 = case (lookupIdEnv env key) of
106 Just xx -> addOneToIdEnv env key (mangle_fn xx)
110 rngIdEnv env = eltsUFM env
112 unitIdEnv id elt = singletonUFM id elt