X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fprelude%2FTysPrim.lhs;h=a0770af428bc261764918329b968e78299c75115;hb=a7bad5034c1163d36522d23c4bafff3354de1d88;hp=d01b25fac0d6071f1857b0fca16656ab6eb736f5;hpb=cf2edc34e8b124993828a2b6da4126c43afcbf99;p=ghc-hetmet.git diff --git a/ghc/compiler/prelude/TysPrim.lhs b/ghc/compiler/prelude/TysPrim.lhs index d01b25f..a0770af 100644 --- a/ghc/compiler/prelude/TysPrim.lhs +++ b/ghc/compiler/prelude/TysPrim.lhs @@ -49,16 +49,22 @@ module TysPrim( #include "HsVersions.h" -import Var ( TyVar, mkSysTyVar ) -import Name ( Name ) +import Var ( TyVar, mkTyVar ) +import Name ( Name, mkLocalName ) +import OccName ( mkVarOcc ) import PrimRep ( PrimRep(..) ) import TyCon ( TyCon, ArgVrcs, mkPrimTyCon, mkLiftedPrimTyCon ) import Type ( mkTyConApp, mkTyConTy, mkTyVarTys, mkTyVarTy, - unliftedTypeKind, liftedTypeKind, openTypeKind, mkArrowKinds + unliftedTypeKind, liftedTypeKind, openTypeKind, + Kind, mkArrowKinds ) +import SrcLoc ( noSrcLoc ) import Unique ( mkAlphaTyVarUnique ) import PrelNames +import FastString ( mkFastString ) import Outputable + +import Char ( ord, chr ) \end{code} %************************************************************************ @@ -104,10 +110,22 @@ primTyCons %* * %************************************************************************ +alphaTyVars is a list of type variables for use in templates: + ["a", "b", ..., "z", "t1", "t2", ... ] + \begin{code} +tyVarList :: Kind -> [TyVar] +tyVarList kind = [ mkTyVar (mkLocalName (mkAlphaTyVarUnique u) + (mkVarOcc (mkFastString name)) + noSrcLoc) kind + | u <- [2..], + let name | c <= 'z' = [c] + | otherwise = 't':show u + where c = chr (u-2 + ord 'a') + ] + alphaTyVars :: [TyVar] -alphaTyVars = [ mkSysTyVar u liftedTypeKind - | u <- map mkAlphaTyVarUnique [2..] ] +alphaTyVars = tyVarList liftedTypeKind betaTyVars = tail alphaTyVars @@ -120,12 +138,8 @@ alphaTys = mkTyVarTys alphaTyVars -- openAlphaTyVar is prepared to be instantiated -- to a lifted or unlifted type variable. It's used for the -- result type for "error", so that we can have (error Int# "Help") -openAlphaTyVar :: TyVar -openAlphaTyVar = mkSysTyVar (mkAlphaTyVarUnique 1) openTypeKind - openAlphaTyVars :: [TyVar] -openAlphaTyVars = [ mkSysTyVar u openTypeKind - | u <- map mkAlphaTyVarUnique [2..] ] +openAlphaTyVars@(openAlphaTyVar:_) = tyVarList openTypeKind openAlphaTy = mkTyVarTy openAlphaTyVar