X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FbasicTypes%2FVar.lhs;h=d4bf400ef6cced13d2dc15d7d94f7bc52e26ed16;hb=0b86bc9b022a5965d2b35f143ff4b919f784e676;hp=697f089b9d5dff8f167d3a338e8f5839f378b1f4;hpb=d5bba9ee196f64a077e922680b16fe6f28fb79db;p=ghc-hetmet.git diff --git a/compiler/basicTypes/Var.lhs b/compiler/basicTypes/Var.lhs index 697f089..d4bf400 100644 --- a/compiler/basicTypes/Var.lhs +++ b/compiler/basicTypes/Var.lhs @@ -10,7 +10,7 @@ module Var ( setVarName, setVarUnique, -- TyVars - TyVar, mkTyVar, mkTcTyVar, + TyVar, mkTyVar, mkTcTyVar, mkWildCoVar, tyVarName, tyVarKind, setTyVarName, setTyVarUnique, setTyVarKind, tcTyVarDetails, @@ -40,9 +40,10 @@ import {-# SOURCE #-} TcType( TcTyVarDetails, pprTcTyVarDetails ) import {-# SOURCE #-} IdInfo( GlobalIdDetails, notGlobalId, IdInfo, seqIdInfo ) import Name ( Name, NamedThing(..), - setNameUnique, nameUnique + setNameUnique, nameUnique, mkSysTvName ) -import Unique ( Unique, Uniquable(..), mkUniqueGrimily, getKey# ) +import Unique ( Unique, Uniquable(..), mkUniqueGrimily, getKey#, + mkBuiltinUnique ) import FastTypes import Outputable \end{code} @@ -67,7 +68,9 @@ data Var realUnique :: FastInt, -- Key for fast comparison -- Identical to the Unique in the name, -- cached here for speed - tyVarKind :: Kind } + tyVarKind :: Kind, + isCoercionVar :: Bool + } | TcTyVar { -- Used only during type inference -- Used for kind variables during @@ -188,6 +191,7 @@ mkTyVar :: Name -> Kind -> TyVar mkTyVar name kind = TyVar { varName = name , realUnique = getKey# (nameUnique name) , tyVarKind = kind + , isCoercionVar = False } mkTcTyVar :: Name -> Kind -> TcTyVarDetails -> TyVar @@ -197,6 +201,15 @@ mkTcTyVar name kind details tyVarKind = kind, tcTyVarDetails = details } + +mkWildCoVar :: Kind -> TyVar +mkWildCoVar kind + = TyVar { varName = mkSysTvName wild_uniq FSLIT("co_wild"), + realUnique = _ILIT(1), + tyVarKind = kind, + isCoercionVar = True } + where + wild_uniq = (mkBuiltinUnique 1) \end{code} %************************************************************************ @@ -214,10 +227,12 @@ setCoVarUnique = setVarUnique setCoVarName = setVarName mkCoVar :: Name -> Kind -> CoVar -mkCoVar name kind = mkTyVar name kind +mkCoVar name kind = TyVar { varName = name + , realUnique = getKey# (nameUnique name) + , tyVarKind = kind + , isCoercionVar = True + } -isCoVar :: TyVar -> Bool -isCoVar ty = isCoSuperKind (tyVarKind ty) \end{code} %************************************************************************ @@ -333,6 +348,9 @@ isId other = False isLocalId (LocalId {}) = True isLocalId other = False +isCoVar (v@(TyVar {})) = isCoercionVar v +isCoVar other = False + -- isLocalVar returns True for type variables as well as local Ids -- These are the variables that we need to pay attention to when finding free -- variables, or doing dependency analysis.