[project @ 1996-01-08 20:28:12 by partain]
[ghc-hetmet.git] / ghc / compiler / envs / TyVarEnv.lhs
diff --git a/ghc/compiler/envs/TyVarEnv.lhs b/ghc/compiler/envs/TyVarEnv.lhs
new file mode 100644 (file)
index 0000000..421b4a2
--- /dev/null
@@ -0,0 +1,71 @@
+%
+% (c) The AQUA Project, Glasgow University, 1994
+%
+\section[TyVarEnv]{Lookup tables that have @TyVar@ keys}
+
+An interface to the @FiniteMap@ machinery, which exports
+a ``personality'' the same as that of the old @TyVarEnv@ module.
+
+\begin{code}
+#include "HsVersions.h"
+
+module TyVarEnv (
+       TyVarEnv(..),  -- abstract: NOT
+
+       TypeEnv(..),    -- most common/important kind of TyVarEnv
+
+       mkTyVarEnv,
+       lookupTyVarEnv,
+       nullTyVarEnv, growTyVarEnvList,
+       isNullTyVarEnv,
+       addOneToTyVarEnv,
+
+       -- and to make the interface self-sufficient...
+       UniqFM,
+       TyVar, Unique, Maybe(..)
+       
+#ifdef USE_ATTACK_PRAGMAS
+       , addToUFM, plusUFM_C, delListFromUFM, delFromUFM, plusUFM,
+       lookupUFM, mapUFM, minusUFM, listToUFM, emptyUFM, eltsUFM,
+       singletonUFM,
+       u2i
+#endif
+    ) where
+
+import AbsUniType
+import UniqFM
+import Maybes          ( Maybe(..) )
+import Outputable
+import Unique          ( Unique, u2i )
+import Util
+\end{code}
+
+\begin{code}
+type TyVarEnv elt = UniqFM elt
+
+type TypeEnv = TyVarEnv UniType -- most common flavo(u)r
+\end{code}
+
+Signatures:
+\begin{code}
+mkTyVarEnv :: [(TyVar, a)] -> TyVarEnv a
+addOneToTyVarEnv :: TyVarEnv a -> TyVar -> a -> TyVarEnv a
+growTyVarEnvList :: TyVarEnv a -> [(TyVar, a)] -> TyVarEnv a
+isNullTyVarEnv :: TyVarEnv a -> Bool
+lookupTyVarEnv :: TyVarEnv a -> TyVar -> Maybe a
+nullTyVarEnv :: TyVarEnv a
+\end{code}
+
+\begin{code}
+mkTyVarEnv stuff = listToUFM stuff
+
+addOneToTyVarEnv env id elt = addToUFM env id elt
+
+growTyVarEnvList env pairs = plusUFM env (listToUFM pairs)
+
+isNullTyVarEnv env = sizeUFM env == 0
+
+lookupTyVarEnv env id = lookupUFM env id
+
+nullTyVarEnv = emptyUFM
+\end{code}