[project @ 1997-06-05 09:16:04 by sof]
[ghc-hetmet.git] / ghc / compiler / types / TyVar.lhs
index 7ba82cd..0fdfc32 100644 (file)
@@ -2,8 +2,8 @@
 #include "HsVersions.h"
 
 module TyVar (
-       GenTyVar(..), TyVar(..),
-       mkTyVar,
+       GenTyVar(..), SYN_IE(TyVar),
+       mkTyVar, mkSysTyVar,
        tyVarKind,              -- TyVar -> Kind
        cloneTyVar,
 
@@ -12,11 +12,11 @@ module TyVar (
 
        -- We also export "environments" keyed off of
        -- TyVars and "sets" containing TyVars:
-       TyVarEnv(..),
+       SYN_IE(TyVarEnv),
        nullTyVarEnv, mkTyVarEnv, addOneToTyVarEnv,
-       growTyVarEnvList, isNullTyVarEnv, lookupTyVarEnv,
+       growTyVarEnvList, isNullTyVarEnv, lookupTyVarEnv, delFromTyVarEnv,
 
-       GenTyVarSet(..), TyVarSet(..),
+       SYN_IE(GenTyVarSet), SYN_IE(TyVarSet),
        emptyTyVarSet, unitTyVarSet, unionTyVarSets,
        unionManyTyVarSets, intersectTyVarSets, mkTyVarSet,
        tyVarSetToList, elementOfTyVarSet, minusTyVarSet,
@@ -24,24 +24,22 @@ module TyVar (
   ) where
 
 CHK_Ubiq()     -- debugging consistency check
-IMPORT_DELOOPER(IdLoop)        -- for paranoia checking
 
 -- friends
-import Usage           ( GenUsage, Usage(..), usageOmega )
+import Usage           ( GenUsage, SYN_IE(Usage), usageOmega )
 import Kind            ( Kind, mkBoxedTypeKind, mkTypeKind )
 
 -- others
 import UniqSet         -- nearly all of it
 import UniqFM          ( emptyUFM, listToUFM, addToUFM, lookupUFM,
-                         plusUFM, sizeUFM, UniqFM
+                         plusUFM, sizeUFM, delFromUFM, UniqFM
                        )
-import Maybes          ( Maybe(..) )
-import Name            ( mkLocalName, changeUnique, Name, RdrName(..) )
-import Pretty          ( Pretty(..), PrettyRep, ppBeside, ppPStr )
-import PprStyle                ( PprStyle )
---import Outputable    ( Outputable(..), NamedThing(..), ExportFlag(..) )
-import SrcLoc          ( mkUnknownSrcLoc, SrcLoc )
+import Name            ( mkSysLocalName, changeUnique, Name, NamedThing(..) )
+import Pretty          ( Doc, (<>), ptext )
+import Outputable      ( PprStyle(..), Outputable(..) )
+import SrcLoc          ( noSrcLoc, SrcLoc )
 import Unique          ( showUnique, mkAlphaTyVarUnique, Unique )
+import UniqFM           ( Uniquable(..) )
 import Util            ( panic, Ord3(..) )
 \end{code}
 
@@ -61,11 +59,17 @@ type TyVar = GenTyVar Usage -- Usage slot makes sense only if Kind = Type
 Simple construction and analysis functions
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 \begin{code}
-mkTyVar :: Name -> Unique -> Kind -> TyVar
-mkTyVar name uniq kind = TyVar  uniq
-                               kind
-                               (Just (changeUnique name uniq))
-                               usageOmega
+mkTyVar :: Name -> Kind -> TyVar
+mkTyVar name kind = TyVar  (uniqueOf name)
+                          kind
+                          (Just name)
+                          usageOmega
+
+mkSysTyVar :: Unique -> Kind -> TyVar
+mkSysTyVar uniq kind = TyVar uniq
+                            kind
+                            Nothing
+                            usageOmega
 
 tyVarKind :: GenTyVar flexi -> Kind
 tyVarKind (TyVar _ kind _ _) = kind
@@ -102,11 +106,13 @@ addOneToTyVarEnv :: TyVarEnv a -> GenTyVar flexi -> a -> TyVarEnv a
 growTyVarEnvList :: TyVarEnv a -> [(GenTyVar flexi, a)] -> TyVarEnv a
 isNullTyVarEnv  :: TyVarEnv a -> Bool
 lookupTyVarEnv  :: TyVarEnv a -> GenTyVar flexi -> Maybe a
+delFromTyVarEnv         :: TyVarEnv a -> GenTyVar flexi -> TyVarEnv a
 
 nullTyVarEnv    = emptyUFM
 mkTyVarEnv      = listToUFM
 addOneToTyVarEnv = addToUFM
 lookupTyVarEnv   = lookupUFM
+delFromTyVarEnv  = delFromUFM
 
 growTyVarEnvList env pairs = plusUFM env (listToUFM pairs)
 isNullTyVarEnv   env      = sizeUFM env == 0
@@ -155,5 +161,5 @@ instance Uniquable (GenTyVar a) where
 
 instance NamedThing (GenTyVar a) where
     getName (TyVar _ _ (Just n) _) = n
-    getName (TyVar u _ _        _) = mkLocalName u (showUnique u) True{-emph uniq-} mkUnknownSrcLoc
+    getName (TyVar u _ _        _) = mkSysLocalName u SLIT("t") noSrcLoc
 \end{code}