[project @ 1996-01-08 20:28:12 by partain]
[ghc-hetmet.git] / ghc / compiler / envs / TyVarEnv.lhs
1 %
2 % (c) The AQUA Project, Glasgow University, 1994
3 %
4 \section[TyVarEnv]{Lookup tables that have @TyVar@ keys}
5
6 An interface to the @FiniteMap@ machinery, which exports
7 a ``personality'' the same as that of the old @TyVarEnv@ module.
8
9 \begin{code}
10 #include "HsVersions.h"
11
12 module TyVarEnv (
13         TyVarEnv(..),  -- abstract: NOT
14
15         TypeEnv(..),    -- most common/important kind of TyVarEnv
16
17         mkTyVarEnv,
18         lookupTyVarEnv,
19         nullTyVarEnv, growTyVarEnvList,
20         isNullTyVarEnv,
21         addOneToTyVarEnv,
22
23         -- and to make the interface self-sufficient...
24         UniqFM,
25         TyVar, Unique, Maybe(..)
26         
27 #ifdef USE_ATTACK_PRAGMAS
28         , addToUFM, plusUFM_C, delListFromUFM, delFromUFM, plusUFM,
29         lookupUFM, mapUFM, minusUFM, listToUFM, emptyUFM, eltsUFM,
30         singletonUFM,
31         u2i
32 #endif
33     ) where
34
35 import AbsUniType
36 import UniqFM
37 import Maybes           ( Maybe(..) )
38 import Outputable
39 import Unique           ( Unique, u2i )
40 import Util
41 \end{code}
42
43 \begin{code}
44 type TyVarEnv elt = UniqFM elt
45
46 type TypeEnv = TyVarEnv UniType -- most common flavo(u)r
47 \end{code}
48
49 Signatures:
50 \begin{code}
51 mkTyVarEnv :: [(TyVar, a)] -> TyVarEnv a
52 addOneToTyVarEnv :: TyVarEnv a -> TyVar -> a -> TyVarEnv a
53 growTyVarEnvList :: TyVarEnv a -> [(TyVar, a)] -> TyVarEnv a
54 isNullTyVarEnv :: TyVarEnv a -> Bool
55 lookupTyVarEnv :: TyVarEnv a -> TyVar -> Maybe a
56 nullTyVarEnv :: TyVarEnv a
57 \end{code}
58
59 \begin{code}
60 mkTyVarEnv stuff = listToUFM stuff
61
62 addOneToTyVarEnv env id elt = addToUFM env id elt
63
64 growTyVarEnvList env pairs = plusUFM env (listToUFM pairs)
65
66 isNullTyVarEnv env = sizeUFM env == 0
67
68 lookupTyVarEnv env id = lookupUFM env id
69
70 nullTyVarEnv = emptyUFM
71 \end{code}