X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Ftypes%2FTyVar.lhs;h=b7fc8b7d581ece259e1e05683df4f0490748c179;hb=5eb1c77c795f92ed0f4c8023847e9d4be1a4fd0d;hp=cddcdcb33902a08ae295eb3cf0ab49c26eab939f;hpb=2f51f1402e6869c0f049ffbe7b019bf6ab80558f;p=ghc-hetmet.git diff --git a/ghc/compiler/types/TyVar.lhs b/ghc/compiler/types/TyVar.lhs index cddcdcb..b7fc8b7 100644 --- a/ghc/compiler/types/TyVar.lhs +++ b/ghc/compiler/types/TyVar.lhs @@ -2,20 +2,21 @@ #include "HsVersions.h" module TyVar ( - GenTyVar(..), TyVar(..), - mkTyVar, + GenTyVar(..), SYN_IE(TyVar), + mkTyVar, mkSysTyVar, tyVarKind, -- TyVar -> Kind cloneTyVar, + openAlphaTyVar, alphaTyVars, alphaTyVar, betaTyVar, gammaTyVar, deltaTyVar, -- 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, @@ -23,20 +24,19 @@ module TyVar ( ) where CHK_Ubiq() -- debugging consistency check -import IdLoop -- for paranoia checking +--IMPORT_DELOOPER(IdLoop) -- for paranoia checking -- friends -import Usage ( GenUsage, Usage(..), usageOmega ) -import Kind ( Kind, mkBoxedTypeKind ) +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, Name, RdrName(..) ) -import Pretty ( Pretty(..), PrettyRep, ppBeside, ppPStr ) +import Name ( mkLocalName, changeUnique, Name, RdrName(..) ) +import Pretty ( SYN_IE(Pretty), PrettyRep, ppBeside, ppPStr ) import PprStyle ( PprStyle ) --import Outputable ( Outputable(..), NamedThing(..), ExportFlag(..) ) import SrcLoc ( mkUnknownSrcLoc, SrcLoc ) @@ -60,11 +60,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 name) - 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 @@ -77,10 +83,16 @@ cloneTyVar (TyVar _ k n x) u = TyVar u k n x Fixed collection of type variables ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \begin{code} + -- openAlphaTyVar is prepared to be instantiated + -- to a boxed or unboxed type variable. It's used for the + -- result type for "error", so that we can have (error Int# "Help") +openAlphaTyVar = TyVar (mkAlphaTyVarUnique 1) mkTypeKind Nothing usageOmega + alphaTyVars = [ TyVar u mkBoxedTypeKind Nothing usageOmega - | u <- map mkAlphaTyVarUnique [1..] ] + | u <- map mkAlphaTyVarUnique [2..] ] (alphaTyVar:betaTyVar:gammaTyVar:deltaTyVar:_) = alphaTyVars + \end{code} @@ -95,11 +107,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 @@ -147,6 +161,6 @@ instance Uniquable (GenTyVar a) where uniqueOf (TyVar u _ _ _) = u instance NamedThing (GenTyVar a) where - getName (TyVar _ _ (Just n) _) = n - getName (TyVar u _ _ _) = mkLocalName u (showUnique u) mkUnknownSrcLoc + getName (TyVar _ _ (Just n) _) = n + getName (TyVar u _ _ _) = mkLocalName u (showUnique u) True{-emph uniq-} mkUnknownSrcLoc \end{code}