X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fprelude%2FTysPrim.lhs;h=9ba28873754da69a84adb1832bfb79c1b5ed0b99;hb=395917a05328e935f40abd080b169aa25546b083;hp=d672241e6adc6f559922a77d3a1ef00e269902b5;hpb=1dfaee318171836b32f6b33a14231c69adfdef2f;p=ghc-hetmet.git diff --git a/ghc/compiler/prelude/TysPrim.lhs b/ghc/compiler/prelude/TysPrim.lhs index d672241..9ba2887 100644 --- a/ghc/compiler/prelude/TysPrim.lhs +++ b/ghc/compiler/prelude/TysPrim.lhs @@ -3,9 +3,6 @@ % \section[TysPrim]{Wired-in knowledge about primitive types} -This module tracks the ``state interface'' document, ``GHC prelude: -types and operations.'' - \begin{code} module TysPrim( alphaTyVars, betaTyVars, alphaTyVar, betaTyVar, gammaTyVar, deltaTyVar, @@ -42,23 +39,27 @@ module TysPrim( word32PrimTyCon, word32PrimTy, int64PrimTyCon, int64PrimTy, - word64PrimTyCon, word64PrimTy, - - primRepTyCon + word64PrimTyCon, word64PrimTy ) where #include "HsVersions.h" -import Var ( TyVar, mkSysTyVar ) -import Name ( Name ) +import Var ( TyVar, mkTyVar ) +import Name ( Name, mkInternalName ) +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 +105,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 (mkInternalName (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 +133,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 @@ -153,7 +162,7 @@ pcPrimTyCon name arg_vrcs rep = mkPrimTyCon name kind arity arg_vrcs rep where arity = length arg_vrcs - kind = mkArrowKinds (take arity (repeat liftedTypeKind)) result_kind + kind = mkArrowKinds (replicate arity liftedTypeKind) result_kind result_kind = unliftedTypeKind -- all primitive types are unlifted pcPrimTyCon0 :: Name -> PrimRep -> TyCon @@ -215,11 +224,11 @@ statePrimTyCon = pcPrimTyCon statePrimTyConName vrcsZ VoidRep \end{code} RealWorld is deeply magical. It is *primitive*, but it is not -*unlifted* (hence PrimPtrRep). We never manipulate values of type +*unlifted* (hence PtrRep). We never manipulate values of type RealWorld; it's only used in the type system, to parameterise State#. \begin{code} -realWorldTyCon = mkLiftedPrimTyCon realWorldTyConName liftedTypeKind 0 [] PrimPtrRep +realWorldTyCon = mkLiftedPrimTyCon realWorldTyConName liftedTypeKind 0 [] PtrRep realWorldTy = mkTyConTy realWorldTyCon realWorldStatePrimTy = mkStatePrimTy realWorldTy -- State# RealWorld \end{code} @@ -235,10 +244,10 @@ defined in \tr{TysWiredIn.lhs}, not here. %************************************************************************ \begin{code} -arrayPrimTyCon = pcPrimTyCon arrayPrimTyConName vrcsP ArrayRep -mutableArrayPrimTyCon = pcPrimTyCon mutableArrayPrimTyConName vrcsZP ArrayRep -mutableByteArrayPrimTyCon = pcPrimTyCon mutableByteArrayPrimTyConName vrcsZ ByteArrayRep -byteArrayPrimTyCon = pcPrimTyCon0 byteArrayPrimTyConName ByteArrayRep +arrayPrimTyCon = pcPrimTyCon arrayPrimTyConName vrcsP PtrRep +mutableArrayPrimTyCon = pcPrimTyCon mutableArrayPrimTyConName vrcsZP PtrRep +mutableByteArrayPrimTyCon = pcPrimTyCon mutableByteArrayPrimTyConName vrcsZ PtrRep +byteArrayPrimTyCon = pcPrimTyCon0 byteArrayPrimTyConName PtrRep mkArrayPrimTy elt = mkTyConApp arrayPrimTyCon [elt] byteArrayPrimTy = mkTyConTy byteArrayPrimTyCon @@ -253,7 +262,7 @@ mkMutableByteArrayPrimTy s = mkTyConApp mutableByteArrayPrimTyCon [s] %************************************************************************ \begin{code} -mutVarPrimTyCon = pcPrimTyCon mutVarPrimTyConName vrcsZP PrimPtrRep +mutVarPrimTyCon = pcPrimTyCon mutVarPrimTyConName vrcsZP PtrRep mkMutVarPrimTy s elt = mkTyConApp mutVarPrimTyCon [s, elt] \end{code} @@ -265,7 +274,7 @@ mkMutVarPrimTy s elt = mkTyConApp mutVarPrimTyCon [s, elt] %************************************************************************ \begin{code} -mVarPrimTyCon = pcPrimTyCon mVarPrimTyConName vrcsZP PrimPtrRep +mVarPrimTyCon = pcPrimTyCon mVarPrimTyConName vrcsZP PtrRep mkMVarPrimTy s elt = mkTyConApp mVarPrimTyCon [s, elt] \end{code} @@ -289,7 +298,7 @@ mkStablePtrPrimTy ty = mkTyConApp stablePtrPrimTyCon [ty] %************************************************************************ \begin{code} -stableNamePrimTyCon = pcPrimTyCon stableNamePrimTyConName vrcsP StableNameRep +stableNamePrimTyCon = pcPrimTyCon stableNamePrimTyConName vrcsP PtrRep mkStableNamePrimTy ty = mkTyConApp stableNamePrimTyCon [ty] \end{code} @@ -312,9 +321,9 @@ dead before it really was. \begin{code} foreignObjPrimTy = mkTyConTy foreignObjPrimTyCon -foreignObjPrimTyCon = pcPrimTyCon0 foreignObjPrimTyConName ForeignObjRep +foreignObjPrimTyCon = pcPrimTyCon0 foreignObjPrimTyConName PtrRep \end{code} - + %************************************************************************ %* * \subsection[TysPrim-BCOs]{The ``bytecode object'' type} @@ -323,7 +332,7 @@ foreignObjPrimTyCon = pcPrimTyCon0 foreignObjPrimTyConName ForeignObjRep \begin{code} bcoPrimTy = mkTyConTy bcoPrimTyCon -bcoPrimTyCon = pcPrimTyCon0 bcoPrimTyConName BCORep +bcoPrimTyCon = pcPrimTyCon0 bcoPrimTyConName PtrRep \end{code} %************************************************************************ @@ -333,7 +342,7 @@ bcoPrimTyCon = pcPrimTyCon0 bcoPrimTyConName BCORep %************************************************************************ \begin{code} -weakPrimTyCon = pcPrimTyCon weakPrimTyConName vrcsP WeakPtrRep +weakPrimTyCon = pcPrimTyCon weakPrimTyConName vrcsP PtrRep mkWeakPrimTy v = mkTyConApp weakPrimTyCon [v] \end{code} @@ -355,33 +364,5 @@ to the thread id internally. \begin{code} threadIdPrimTy = mkTyConTy threadIdPrimTyCon -threadIdPrimTyCon = pcPrimTyCon0 threadIdPrimTyConName ThreadIdRep -\end{code} - -%************************************************************************ -%* * -\subsection[TysPrim-PrimRep]{Making types from PrimReps} -%* * -%************************************************************************ - -Each of the primitive types from this module is equivalent to a -PrimRep (see PrimRep.lhs). The following function returns the -primitive TyCon for a given PrimRep. - -\begin{code} -primRepTyCon CharRep = charPrimTyCon -primRepTyCon Int8Rep = charPrimTyCon -primRepTyCon IntRep = intPrimTyCon -primRepTyCon WordRep = wordPrimTyCon -primRepTyCon Int32Rep = int32PrimTyCon -primRepTyCon Int64Rep = int64PrimTyCon -primRepTyCon Word32Rep = word32PrimTyCon -primRepTyCon Word64Rep = word64PrimTyCon -primRepTyCon AddrRep = addrPrimTyCon -primRepTyCon FloatRep = floatPrimTyCon -primRepTyCon DoubleRep = doublePrimTyCon -primRepTyCon StablePtrRep = stablePtrPrimTyCon -primRepTyCon ForeignObjRep = foreignObjPrimTyCon -primRepTyCon WeakPtrRep = weakPrimTyCon -primRepTyCon other = pprPanic "primRepTyCon" (ppr other) +threadIdPrimTyCon = pcPrimTyCon0 threadIdPrimTyConName PtrRep \end{code}