X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fprelude%2FTysWiredIn.lhs;h=5b1e3d0a0c3ada9c101c5a855fc97890dd2bf543;hb=f7ecf7234c224489be8a5e63fced903b655d92ee;hp=2efbb8494a81fa4eebb8c748e12badd5fc478d66;hpb=5cf27e8f1731c52fe63a5b9615f927484164c61b;p=ghc-hetmet.git diff --git a/ghc/compiler/prelude/TysWiredIn.lhs b/ghc/compiler/prelude/TysWiredIn.lhs index 2efbb84..5b1e3d0 100644 --- a/ghc/compiler/prelude/TysWiredIn.lhs +++ b/ghc/compiler/prelude/TysWiredIn.lhs @@ -25,13 +25,11 @@ module TysWiredIn ( doubleDataCon, doubleTy, doubleTyCon, - eqDataCon, falseDataCon, floatDataCon, floatTy, floatTyCon, getStatePairingConInfo, - gtDataCon, intDataCon, intTy, intTyCon, @@ -41,25 +39,20 @@ module TysWiredIn ( liftDataCon, liftTyCon, listTyCon, - ltDataCon, - mallocPtrTyCon, + foreignObjTyCon, mkLiftTy, mkListTy, mkPrimIoTy, + mkStateTy, mkStateTransformerTy, mkTupleTy, nilDataCon, - orderingTy, - orderingTyCon, primIoTyCon, - ratioDataCon, - ratioTyCon, - rationalTy, - rationalTyCon, realWorldStateTy, return2GMPsTyCon, returnIntAndGMPTyCon, stTyCon, + stDataCon, stablePtrTyCon, stateAndAddrPrimTyCon, stateAndArrayPrimTyCon, @@ -68,7 +61,7 @@ module TysWiredIn ( stateAndDoublePrimTyCon, stateAndFloatPrimTyCon, stateAndIntPrimTyCon, - stateAndMallocPtrPrimTyCon, + stateAndForeignObjPrimTyCon, stateAndMutableArrayPrimTyCon, stateAndMutableByteArrayPrimTyCon, stateAndPtrPrimTyCon, @@ -78,14 +71,11 @@ module TysWiredIn ( stateDataCon, stateTyCon, stringTy, - stringTyCon, trueDataCon, unitTy, - voidTy, voidTyCon, wordDataCon, wordTy, wordTyCon - ) where --ToDo:rm @@ -95,24 +85,24 @@ module TysWiredIn ( --import PprStyle --import Kind -import Ubiq -import TyLoop ( mkDataCon, StrictnessMark(..) ) +IMP_Ubiq() +IMPORT_DELOOPER(TyLoop) ( mkDataCon, StrictnessMark(..) ) +IMPORT_DELOOPER(IdLoop) ( SpecEnv ) -- friends: import PrelMods import TysPrim -- others: -import SpecEnv ( SpecEnv(..) ) import Kind ( mkBoxedTypeKind, mkArrowKind ) -import Name ( mkBuiltinName ) +import Name ( mkWiredInName, ExportFlag(..) ) import SrcLoc ( mkBuiltinSrcLoc ) import TyCon ( mkDataTyCon, mkTupleTyCon, mkSynTyCon, NewOrData(..), TyCon ) -import Type ( mkTyConTy, applyTyCon, mkSynTy, mkSigmaTy, - mkFunTys, maybeAppDataTyConExpandingDicts, - GenType(..), ThetaType(..), TauType(..) ) +import Type ( mkTyConTy, applyTyCon, mkSigmaTy, + mkFunTy, maybeAppTyCon, + GenType(..), SYN_IE(ThetaType), SYN_IE(TauType) ) import TyVar ( tyVarKind, alphaTyVar, betaTyVar ) import Unique import Util ( assoc, panic ) @@ -122,19 +112,33 @@ addOneToSpecEnv = error "TysWiredIn:addOneToSpecEnv = " pc_gen_specs = error "TysWiredIn:pc_gen_specs " mkSpecInfo = error "TysWiredIn:SpecInfo" -pcDataTyCon :: Unique{-TyConKey-} -> Module -> FAST_STRING - -> [TyVar] -> [Id] -> TyCon -pcDataTyCon key mod str tyvars cons - = mkDataTyCon (mkBuiltinName key mod str) tycon_kind +alpha_tyvar = [alphaTyVar] +alpha_ty = [alphaTy] +alpha_beta_tyvars = [alphaTyVar, betaTyVar] + +pcDataTyCon, pcNewTyCon + :: Unique{-TyConKey-} -> Module -> FAST_STRING + -> [TyVar] -> [Id] -> TyCon + +pcDataTyCon = pc_tycon DataType +pcNewTyCon = pc_tycon NewType + +pc_tycon new_or_data key mod str tyvars cons + = mkDataTyCon (mkWiredInName key (OrigName mod str) ExportAll) tycon_kind tyvars [{-no context-}] cons [{-no derivings-}] - DataType + new_or_data where tycon_kind = foldr (mkArrowKind . tyVarKind) mkBoxedTypeKind tyvars +pcSynTyCon key mod str kind arity tyvars expansion + = mkSynTyCon + (mkWiredInName key (OrigName mod str) ExportAll) + kind arity tyvars expansion + pcDataCon :: Unique{-DataConKey-} -> Module -> FAST_STRING -> [TyVar] -> ThetaType -> [TauType] -> TyCon -> SpecEnv -> Id pcDataCon key mod str tyvars context arg_tys tycon specenv - = mkDataCon (mkBuiltinName key mod str) + = mkDataCon (mkWiredInName key (OrigName mod str) ExportAll) [ NotMarkedStrict | a <- arg_tys ] [ {- no labelled fields -} ] tyvars context arg_tys tycon @@ -154,82 +158,77 @@ pcGenerateDataSpecs ty %************************************************************************ \begin{code} --- The Void type is represented as a data type with no constructors -voidTy = mkTyConTy voidTyCon - -voidTyCon = pcDataTyCon voidTyConKey pRELUDE_BUILTIN SLIT("Void") [] [] -\end{code} - -\begin{code} charTy = mkTyConTy charTyCon -charTyCon = pcDataTyCon charTyConKey pRELUDE_BUILTIN SLIT("Char") [] [charDataCon] -charDataCon = pcDataCon charDataConKey pRELUDE_BUILTIN SLIT("C#") [] [] [charPrimTy] charTyCon nullSpecEnv +charTyCon = pcDataTyCon charTyConKey pRELUDE SLIT("Char") [] [charDataCon] +charDataCon = pcDataCon charDataConKey pRELUDE SLIT("C#") [] [] [charPrimTy] charTyCon nullSpecEnv + +stringTy = mkListTy charTy -- convenience only \end{code} \begin{code} intTy = mkTyConTy intTyCon -intTyCon = pcDataTyCon intTyConKey pRELUDE_BUILTIN SLIT("Int") [] [intDataCon] -intDataCon = pcDataCon intDataConKey pRELUDE_BUILTIN SLIT("I#") [] [] [intPrimTy] intTyCon nullSpecEnv +intTyCon = pcDataTyCon intTyConKey pRELUDE SLIT("Int") [] [intDataCon] +intDataCon = pcDataCon intDataConKey pRELUDE SLIT("I#") [] [] [intPrimTy] intTyCon nullSpecEnv \end{code} \begin{code} wordTy = mkTyConTy wordTyCon -wordTyCon = pcDataTyCon wordTyConKey pRELUDE_BUILTIN SLIT("_Word") [] [wordDataCon] -wordDataCon = pcDataCon wordDataConKey pRELUDE_BUILTIN SLIT("W#") [] [] [wordPrimTy] wordTyCon nullSpecEnv +wordTyCon = pcDataTyCon wordTyConKey gHC__ SLIT("Word") [] [wordDataCon] +wordDataCon = pcDataCon wordDataConKey gHC__ SLIT("W#") [] [] [wordPrimTy] wordTyCon nullSpecEnv \end{code} \begin{code} addrTy = mkTyConTy addrTyCon -addrTyCon = pcDataTyCon addrTyConKey pRELUDE_BUILTIN SLIT("_Addr") [] [addrDataCon] -addrDataCon = pcDataCon addrDataConKey pRELUDE_BUILTIN SLIT("A#") [] [] [addrPrimTy] addrTyCon nullSpecEnv +addrTyCon = pcDataTyCon addrTyConKey gHC__ SLIT("Addr") [] [addrDataCon] +addrDataCon = pcDataCon addrDataConKey gHC__ SLIT("A#") [] [] [addrPrimTy] addrTyCon nullSpecEnv \end{code} \begin{code} floatTy = mkTyConTy floatTyCon -floatTyCon = pcDataTyCon floatTyConKey pRELUDE_BUILTIN SLIT("Float") [] [floatDataCon] -floatDataCon = pcDataCon floatDataConKey pRELUDE_BUILTIN SLIT("F#") [] [] [floatPrimTy] floatTyCon nullSpecEnv +floatTyCon = pcDataTyCon floatTyConKey pRELUDE SLIT("Float") [] [floatDataCon] +floatDataCon = pcDataCon floatDataConKey pRELUDE SLIT("F#") [] [] [floatPrimTy] floatTyCon nullSpecEnv \end{code} \begin{code} doubleTy = mkTyConTy doubleTyCon -doubleTyCon = pcDataTyCon doubleTyConKey pRELUDE_BUILTIN SLIT("Double") [] [doubleDataCon] -doubleDataCon = pcDataCon doubleDataConKey pRELUDE_BUILTIN SLIT("D#") [] [] [doublePrimTy] doubleTyCon nullSpecEnv +doubleTyCon = pcDataTyCon doubleTyConKey pRELUDE SLIT("Double") [] [doubleDataCon] +doubleDataCon = pcDataCon doubleDataConKey pRELUDE SLIT("D#") [] [] [doublePrimTy] doubleTyCon nullSpecEnv \end{code} \begin{code} mkStateTy ty = applyTyCon stateTyCon [ty] realWorldStateTy = mkStateTy realWorldTy -- a common use -stateTyCon = pcDataTyCon stateTyConKey pRELUDE_BUILTIN SLIT("_State") [alphaTyVar] [stateDataCon] +stateTyCon = pcDataTyCon stateTyConKey gHC__ SLIT("State") alpha_tyvar [stateDataCon] stateDataCon - = pcDataCon stateDataConKey pRELUDE_BUILTIN SLIT("S#") - [alphaTyVar] [] [mkStatePrimTy alphaTy] stateTyCon nullSpecEnv + = pcDataCon stateDataConKey gHC__ SLIT("S#") + alpha_tyvar [] [mkStatePrimTy alphaTy] stateTyCon nullSpecEnv \end{code} \begin{code} stablePtrTyCon - = pcDataTyCon stablePtrTyConKey gLASGOW_MISC SLIT("_StablePtr") - [alphaTyVar] [stablePtrDataCon] + = pcDataTyCon stablePtrTyConKey gHC__ SLIT("StablePtr") + alpha_tyvar [stablePtrDataCon] where stablePtrDataCon - = pcDataCon stablePtrDataConKey gLASGOW_MISC SLIT("_StablePtr") - [alphaTyVar] [] [applyTyCon stablePtrPrimTyCon [alphaTy]] stablePtrTyCon nullSpecEnv + = pcDataCon stablePtrDataConKey gHC__ SLIT("StablePtr") + alpha_tyvar [] [mkStablePtrPrimTy alphaTy] stablePtrTyCon nullSpecEnv \end{code} \begin{code} -mallocPtrTyCon - = pcDataTyCon mallocPtrTyConKey gLASGOW_MISC SLIT("_MallocPtr") - [] [mallocPtrDataCon] +foreignObjTyCon + = pcDataTyCon foreignObjTyConKey gHC__ SLIT("ForeignObj") + [] [foreignObjDataCon] where - mallocPtrDataCon - = pcDataCon mallocPtrDataConKey gLASGOW_MISC SLIT("_MallocPtr") - [] [] [applyTyCon mallocPtrPrimTyCon []] mallocPtrTyCon nullSpecEnv + foreignObjDataCon + = pcDataCon foreignObjDataConKey gHC__ SLIT("ForeignObj") + [] [] [foreignObjPrimTy] foreignObjTyCon nullSpecEnv \end{code} %************************************************************************ @@ -243,27 +242,27 @@ mallocPtrTyCon integerTy :: GenType t u integerTy = mkTyConTy integerTyCon -integerTyCon = pcDataTyCon integerTyConKey pRELUDE_BUILTIN SLIT("Integer") [] [integerDataCon] +integerTyCon = pcDataTyCon integerTyConKey pRELUDE SLIT("Integer") [] [integerDataCon] -integerDataCon = pcDataCon integerDataConKey pRELUDE_BUILTIN SLIT("J#") +integerDataCon = pcDataCon integerDataConKey pRELUDE SLIT("J#") [] [] [intPrimTy, intPrimTy, byteArrayPrimTy] integerTyCon nullSpecEnv \end{code} And the other pairing types: \begin{code} return2GMPsTyCon = pcDataTyCon return2GMPsTyConKey - pRELUDE_BUILTIN SLIT("_Return2GMPs") [] [return2GMPsDataCon] + gHC__ SLIT("Return2GMPs") [] [return2GMPsDataCon] return2GMPsDataCon - = pcDataCon return2GMPsDataConKey pRELUDE_BUILTIN SLIT("_Return2GMPs") [] [] + = pcDataCon return2GMPsDataConKey gHC__ SLIT("Return2GMPs") [] [] [intPrimTy, intPrimTy, byteArrayPrimTy, intPrimTy, intPrimTy, byteArrayPrimTy] return2GMPsTyCon nullSpecEnv returnIntAndGMPTyCon = pcDataTyCon returnIntAndGMPTyConKey - pRELUDE_BUILTIN SLIT("_ReturnIntAndGMP") [] [returnIntAndGMPDataCon] + gHC__ SLIT("ReturnIntAndGMP") [] [returnIntAndGMPDataCon] returnIntAndGMPDataCon - = pcDataCon returnIntAndGMPDataConKey pRELUDE_BUILTIN SLIT("_ReturnIntAndGMP") [] [] + = pcDataCon returnIntAndGMPDataConKey gHC__ SLIT("ReturnIntAndGMP") [] [] [intPrimTy, intPrimTy, intPrimTy, byteArrayPrimTy] returnIntAndGMPTyCon nullSpecEnv \end{code} @@ -282,119 +281,119 @@ We fish one of these \tr{StateAnd#} things with \begin{code} stateAndPtrPrimTyCon - = pcDataTyCon stateAndPtrPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndPtr#") - [alphaTyVar, betaTyVar] [stateAndPtrPrimDataCon] + = pcDataTyCon stateAndPtrPrimTyConKey gHC__ SLIT("StateAndPtr#") + alpha_beta_tyvars [stateAndPtrPrimDataCon] stateAndPtrPrimDataCon - = pcDataCon stateAndPtrPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndPtr#") - [alphaTyVar, betaTyVar] [] [mkStatePrimTy alphaTy, betaTy] + = pcDataCon stateAndPtrPrimDataConKey gHC__ SLIT("StateAndPtr#") + alpha_beta_tyvars [] [mkStatePrimTy alphaTy, betaTy] stateAndPtrPrimTyCon nullSpecEnv stateAndCharPrimTyCon - = pcDataTyCon stateAndCharPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndChar#") - [alphaTyVar] [stateAndCharPrimDataCon] + = pcDataTyCon stateAndCharPrimTyConKey gHC__ SLIT("StateAndChar#") + alpha_tyvar [stateAndCharPrimDataCon] stateAndCharPrimDataCon - = pcDataCon stateAndCharPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndChar#") - [alphaTyVar] [] [mkStatePrimTy alphaTy, charPrimTy] + = pcDataCon stateAndCharPrimDataConKey gHC__ SLIT("StateAndChar#") + alpha_tyvar [] [mkStatePrimTy alphaTy, charPrimTy] stateAndCharPrimTyCon nullSpecEnv stateAndIntPrimTyCon - = pcDataTyCon stateAndIntPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndInt#") - [alphaTyVar] [stateAndIntPrimDataCon] + = pcDataTyCon stateAndIntPrimTyConKey gHC__ SLIT("StateAndInt#") + alpha_tyvar [stateAndIntPrimDataCon] stateAndIntPrimDataCon - = pcDataCon stateAndIntPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndInt#") - [alphaTyVar] [] [mkStatePrimTy alphaTy, intPrimTy] + = pcDataCon stateAndIntPrimDataConKey gHC__ SLIT("StateAndInt#") + alpha_tyvar [] [mkStatePrimTy alphaTy, intPrimTy] stateAndIntPrimTyCon nullSpecEnv stateAndWordPrimTyCon - = pcDataTyCon stateAndWordPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndWord#") - [alphaTyVar] [stateAndWordPrimDataCon] + = pcDataTyCon stateAndWordPrimTyConKey gHC__ SLIT("StateAndWord#") + alpha_tyvar [stateAndWordPrimDataCon] stateAndWordPrimDataCon - = pcDataCon stateAndWordPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndWord#") - [alphaTyVar] [] [mkStatePrimTy alphaTy, wordPrimTy] + = pcDataCon stateAndWordPrimDataConKey gHC__ SLIT("StateAndWord#") + alpha_tyvar [] [mkStatePrimTy alphaTy, wordPrimTy] stateAndWordPrimTyCon nullSpecEnv stateAndAddrPrimTyCon - = pcDataTyCon stateAndAddrPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndAddr#") - [alphaTyVar] [stateAndAddrPrimDataCon] + = pcDataTyCon stateAndAddrPrimTyConKey gHC__ SLIT("StateAndAddr#") + alpha_tyvar [stateAndAddrPrimDataCon] stateAndAddrPrimDataCon - = pcDataCon stateAndAddrPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndAddr#") - [alphaTyVar] [] [mkStatePrimTy alphaTy, addrPrimTy] + = pcDataCon stateAndAddrPrimDataConKey gHC__ SLIT("StateAndAddr#") + alpha_tyvar [] [mkStatePrimTy alphaTy, addrPrimTy] stateAndAddrPrimTyCon nullSpecEnv stateAndStablePtrPrimTyCon - = pcDataTyCon stateAndStablePtrPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndStablePtr#") - [alphaTyVar, betaTyVar] [stateAndStablePtrPrimDataCon] + = pcDataTyCon stateAndStablePtrPrimTyConKey gHC__ SLIT("StateAndStablePtr#") + alpha_beta_tyvars [stateAndStablePtrPrimDataCon] stateAndStablePtrPrimDataCon - = pcDataCon stateAndStablePtrPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndStablePtr#") - [alphaTyVar, betaTyVar] [] + = pcDataCon stateAndStablePtrPrimDataConKey gHC__ SLIT("StateAndStablePtr#") + alpha_beta_tyvars [] [mkStatePrimTy alphaTy, applyTyCon stablePtrPrimTyCon [betaTy]] stateAndStablePtrPrimTyCon nullSpecEnv -stateAndMallocPtrPrimTyCon - = pcDataTyCon stateAndMallocPtrPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndMallocPtr#") - [alphaTyVar] [stateAndMallocPtrPrimDataCon] -stateAndMallocPtrPrimDataCon - = pcDataCon stateAndMallocPtrPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndMallocPtr#") - [alphaTyVar] [] - [mkStatePrimTy alphaTy, applyTyCon mallocPtrPrimTyCon []] - stateAndMallocPtrPrimTyCon nullSpecEnv +stateAndForeignObjPrimTyCon + = pcDataTyCon stateAndForeignObjPrimTyConKey gHC__ SLIT("StateAndForeignObj#") + alpha_tyvar [stateAndForeignObjPrimDataCon] +stateAndForeignObjPrimDataCon + = pcDataCon stateAndForeignObjPrimDataConKey gHC__ SLIT("StateAndForeignObj#") + alpha_tyvar [] + [mkStatePrimTy alphaTy, applyTyCon foreignObjPrimTyCon []] + stateAndForeignObjPrimTyCon nullSpecEnv stateAndFloatPrimTyCon - = pcDataTyCon stateAndFloatPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndFloat#") - [alphaTyVar] [stateAndFloatPrimDataCon] + = pcDataTyCon stateAndFloatPrimTyConKey gHC__ SLIT("StateAndFloat#") + alpha_tyvar [stateAndFloatPrimDataCon] stateAndFloatPrimDataCon - = pcDataCon stateAndFloatPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndFloat#") - [alphaTyVar] [] [mkStatePrimTy alphaTy, floatPrimTy] + = pcDataCon stateAndFloatPrimDataConKey gHC__ SLIT("StateAndFloat#") + alpha_tyvar [] [mkStatePrimTy alphaTy, floatPrimTy] stateAndFloatPrimTyCon nullSpecEnv stateAndDoublePrimTyCon - = pcDataTyCon stateAndDoublePrimTyConKey pRELUDE_BUILTIN SLIT("StateAndDouble#") - [alphaTyVar] [stateAndDoublePrimDataCon] + = pcDataTyCon stateAndDoublePrimTyConKey gHC__ SLIT("StateAndDouble#") + alpha_tyvar [stateAndDoublePrimDataCon] stateAndDoublePrimDataCon - = pcDataCon stateAndDoublePrimDataConKey pRELUDE_BUILTIN SLIT("StateAndDouble#") - [alphaTyVar] [] [mkStatePrimTy alphaTy, doublePrimTy] + = pcDataCon stateAndDoublePrimDataConKey gHC__ SLIT("StateAndDouble#") + alpha_tyvar [] [mkStatePrimTy alphaTy, doublePrimTy] stateAndDoublePrimTyCon nullSpecEnv \end{code} \begin{code} stateAndArrayPrimTyCon - = pcDataTyCon stateAndArrayPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndArray#") - [alphaTyVar, betaTyVar] [stateAndArrayPrimDataCon] + = pcDataTyCon stateAndArrayPrimTyConKey gHC__ SLIT("StateAndArray#") + alpha_beta_tyvars [stateAndArrayPrimDataCon] stateAndArrayPrimDataCon - = pcDataCon stateAndArrayPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndArray#") - [alphaTyVar, betaTyVar] [] [mkStatePrimTy alphaTy, mkArrayPrimTy betaTy] + = pcDataCon stateAndArrayPrimDataConKey gHC__ SLIT("StateAndArray#") + alpha_beta_tyvars [] [mkStatePrimTy alphaTy, mkArrayPrimTy betaTy] stateAndArrayPrimTyCon nullSpecEnv stateAndMutableArrayPrimTyCon - = pcDataTyCon stateAndMutableArrayPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndMutableArray#") - [alphaTyVar, betaTyVar] [stateAndMutableArrayPrimDataCon] + = pcDataTyCon stateAndMutableArrayPrimTyConKey gHC__ SLIT("StateAndMutableArray#") + alpha_beta_tyvars [stateAndMutableArrayPrimDataCon] stateAndMutableArrayPrimDataCon - = pcDataCon stateAndMutableArrayPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndMutableArray#") - [alphaTyVar, betaTyVar] [] [mkStatePrimTy alphaTy, mkMutableArrayPrimTy alphaTy betaTy] + = pcDataCon stateAndMutableArrayPrimDataConKey gHC__ SLIT("StateAndMutableArray#") + alpha_beta_tyvars [] [mkStatePrimTy alphaTy, mkMutableArrayPrimTy alphaTy betaTy] stateAndMutableArrayPrimTyCon nullSpecEnv stateAndByteArrayPrimTyCon - = pcDataTyCon stateAndByteArrayPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndByteArray#") - [alphaTyVar] [stateAndByteArrayPrimDataCon] + = pcDataTyCon stateAndByteArrayPrimTyConKey gHC__ SLIT("StateAndByteArray#") + alpha_tyvar [stateAndByteArrayPrimDataCon] stateAndByteArrayPrimDataCon - = pcDataCon stateAndByteArrayPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndByteArray#") - [alphaTyVar] [] [mkStatePrimTy alphaTy, byteArrayPrimTy] + = pcDataCon stateAndByteArrayPrimDataConKey gHC__ SLIT("StateAndByteArray#") + alpha_tyvar [] [mkStatePrimTy alphaTy, byteArrayPrimTy] stateAndByteArrayPrimTyCon nullSpecEnv stateAndMutableByteArrayPrimTyCon - = pcDataTyCon stateAndMutableByteArrayPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndMutableByteArray#") - [alphaTyVar] [stateAndMutableByteArrayPrimDataCon] + = pcDataTyCon stateAndMutableByteArrayPrimTyConKey gHC__ SLIT("StateAndMutableByteArray#") + alpha_tyvar [stateAndMutableByteArrayPrimDataCon] stateAndMutableByteArrayPrimDataCon - = pcDataCon stateAndMutableByteArrayPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndMutableByteArray#") - [alphaTyVar] [] [mkStatePrimTy alphaTy, applyTyCon mutableByteArrayPrimTyCon [alphaTy]] + = pcDataCon stateAndMutableByteArrayPrimDataConKey gHC__ SLIT("StateAndMutableByteArray#") + alpha_tyvar [] [mkStatePrimTy alphaTy, applyTyCon mutableByteArrayPrimTyCon alpha_ty] stateAndMutableByteArrayPrimTyCon nullSpecEnv stateAndSynchVarPrimTyCon - = pcDataTyCon stateAndSynchVarPrimTyConKey pRELUDE_BUILTIN SLIT("StateAndSynchVar#") - [alphaTyVar, betaTyVar] [stateAndSynchVarPrimDataCon] + = pcDataTyCon stateAndSynchVarPrimTyConKey gHC__ SLIT("StateAndSynchVar#") + alpha_beta_tyvars [stateAndSynchVarPrimDataCon] stateAndSynchVarPrimDataCon - = pcDataCon stateAndSynchVarPrimDataConKey pRELUDE_BUILTIN SLIT("StateAndSynchVar#") - [alphaTyVar, betaTyVar] [] [mkStatePrimTy alphaTy, mkSynchVarPrimTy alphaTy betaTy] + = pcDataCon stateAndSynchVarPrimDataConKey gHC__ SLIT("StateAndSynchVar#") + alpha_beta_tyvars [] [mkStatePrimTy alphaTy, mkSynchVarPrimTy alphaTy betaTy] stateAndSynchVarPrimTyCon nullSpecEnv \end{code} @@ -409,9 +408,9 @@ getStatePairingConInfo Type) -- type of state pair getStatePairingConInfo prim_ty - = case (maybeAppDataTyConExpandingDicts prim_ty) of + = case (maybeAppTyCon prim_ty) of Nothing -> panic "getStatePairingConInfo:1" - Just (prim_tycon, tys_applied, _) -> + Just (prim_tycon, tys_applied) -> let (pair_con, pair_tycon, num_tys) = assoc "getStatePairingConInfo" tbl prim_tycon pair_ty = applyTyCon pair_tycon (realWorldTy : drop num_tys tys_applied) @@ -424,7 +423,7 @@ getStatePairingConInfo prim_ty (wordPrimTyCon, (stateAndWordPrimDataCon, stateAndWordPrimTyCon, 0)), (addrPrimTyCon, (stateAndAddrPrimDataCon, stateAndAddrPrimTyCon, 0)), (stablePtrPrimTyCon, (stateAndStablePtrPrimDataCon, stateAndStablePtrPrimTyCon, 0)), - (mallocPtrPrimTyCon, (stateAndMallocPtrPrimDataCon, stateAndMallocPtrPrimTyCon, 0)), + (foreignObjPrimTyCon, (stateAndForeignObjPrimDataCon, stateAndForeignObjPrimTyCon, 0)), (floatPrimTyCon, (stateAndFloatPrimDataCon, stateAndFloatPrimTyCon, 0)), (doublePrimTyCon, (stateAndDoublePrimDataCon, stateAndDoublePrimTyCon, 0)), (arrayPrimTyCon, (stateAndArrayPrimDataCon, stateAndArrayPrimTyCon, 0)), @@ -445,39 +444,30 @@ getStatePairingConInfo prim_ty This is really just an ordinary synonym, except it is ABSTRACT. \begin{code} -mkStateTransformerTy s a = mkSynTy stTyCon [s, a] - -stTyCon - = let - ty = mkFunTys [mkStateTy alphaTy] (mkTupleTy 2 [betaTy, mkStateTy alphaTy]) - in - mkSynTyCon - (mkBuiltinName stTyConKey gLASGOW_ST SLIT("_ST")) - (mkBoxedTypeKind `mkArrowKind` (mkBoxedTypeKind `mkArrowKind` mkBoxedTypeKind)) - 2 [alphaTyVar, betaTyVar] - ty +mkStateTransformerTy s a = applyTyCon stTyCon [s, a] + +stTyCon = pcNewTyCon stTyConKey gHC__ SLIT("ST") alpha_beta_tyvars [stDataCon] + +stDataCon = pcDataCon stDataConKey gHC__ SLIT("ST") + alpha_beta_tyvars [] [ty] stTyCon nullSpecEnv + where + ty = mkFunTy (mkStateTy alphaTy) (mkTupleTy 2 [betaTy, mkStateTy alphaTy]) \end{code} %************************************************************************ %* * -\subsection[TysWiredIn-IO]{The @PrimIO@ and @IO@ monadic-I/O types} +\subsection[TysWiredIn-IO]{The @PrimIO@ monadic-I/O type} %* * %************************************************************************ -@PrimIO@ and @IO@ really are just plain synonyms. - \begin{code} -mkPrimIoTy a = mkSynTy primIoTyCon [a] +mkPrimIoTy a = mkStateTransformerTy realWorldTy a primIoTyCon - = let - ty = mkStateTransformerTy realWorldTy alphaTy - in --- pprTrace "primIOTyCon:" (ppCat [pprType PprDebug ty, ppr PprDebug (typeKind ty)]) $ - mkSynTyCon - (mkBuiltinName primIoTyConKey pRELUDE_PRIMIO SLIT("PrimIO")) + = pcSynTyCon + primIoTyConKey gHC__ SLIT("PrimIO") (mkBoxedTypeKind `mkArrowKind` mkBoxedTypeKind) - 1 [alphaTyVar] ty + 1 alpha_tyvar (mkPrimIoTy alphaTy) \end{code} %************************************************************************ @@ -531,31 +521,10 @@ primitive counterpart. \begin{code} boolTy = mkTyConTy boolTyCon -boolTyCon = pcDataTyCon boolTyConKey pRELUDE_CORE SLIT("Bool") [] [falseDataCon, trueDataCon] - -falseDataCon = pcDataCon falseDataConKey pRELUDE_CORE SLIT("False") [] [] [] boolTyCon nullSpecEnv -trueDataCon = pcDataCon trueDataConKey pRELUDE_CORE SLIT("True") [] [] [] boolTyCon nullSpecEnv -\end{code} - -%************************************************************************ -%* * -\subsection[TysWiredIn-Ordering]{The @Ordering@ type} -%* * -%************************************************************************ - -\begin{code} ---------------------------------------------- --- data Ordering = LT | EQ | GT deriving () ---------------------------------------------- - -orderingTy = mkTyConTy orderingTyCon - -orderingTyCon = pcDataTyCon orderingTyConKey pRELUDE_BUILTIN SLIT("Ordering") [] - [ltDataCon, eqDataCon, gtDataCon] +boolTyCon = pcDataTyCon boolTyConKey pRELUDE SLIT("Bool") [] [falseDataCon, trueDataCon] -ltDataCon = pcDataCon ltDataConKey pRELUDE_BUILTIN SLIT("LT") [] [] [] orderingTyCon nullSpecEnv -eqDataCon = pcDataCon eqDataConKey pRELUDE_BUILTIN SLIT("EQ") [] [] [] orderingTyCon nullSpecEnv -gtDataCon = pcDataCon gtDataConKey pRELUDE_BUILTIN SLIT("GT") [] [] [] orderingTyCon nullSpecEnv +falseDataCon = pcDataCon falseDataConKey pRELUDE SLIT("False") [] [] [] boolTyCon nullSpecEnv +trueDataCon = pcDataCon trueDataConKey pRELUDE SLIT("True") [] [] [] boolTyCon nullSpecEnv \end{code} %************************************************************************ @@ -565,27 +534,27 @@ gtDataCon = pcDataCon gtDataConKey pRELUDE_BUILTIN SLIT("GT") [] [] [] ordering %************************************************************************ Special syntax, deeply wired in, but otherwise an ordinary algebraic -data type: +data types: \begin{verbatim} -data List a = Nil | a : (List a) -ToDo: data [] a = [] | a : (List a) -ToDo: data () = () - data (,,) a b c = (,,) a b c +data [] a = [] | a : (List a) +data () = () +data (,) a b = (,,) a b +... \end{verbatim} \begin{code} mkListTy :: GenType t u -> GenType t u mkListTy ty = applyTyCon listTyCon [ty] -alphaListTy = mkSigmaTy [alphaTyVar] [] (applyTyCon listTyCon [alphaTy]) +alphaListTy = mkSigmaTy alpha_tyvar [] (applyTyCon listTyCon alpha_ty) -listTyCon = pcDataTyCon listTyConKey pRELUDE_BUILTIN SLIT("[]") - [alphaTyVar] [nilDataCon, consDataCon] +listTyCon = pcDataTyCon listTyConKey pRELUDE SLIT("[]") + alpha_tyvar [nilDataCon, consDataCon] -nilDataCon = pcDataCon nilDataConKey pRELUDE_BUILTIN SLIT("[]") [alphaTyVar] [] [] listTyCon +nilDataCon = pcDataCon nilDataConKey pRELUDE SLIT("[]") alpha_tyvar [] [] listTyCon (pcGenerateDataSpecs alphaListTy) -consDataCon = pcDataCon consDataConKey pRELUDE_BUILTIN SLIT(":") - [alphaTyVar] [] [alphaTy, applyTyCon listTyCon [alphaTy]] listTyCon +consDataCon = pcDataCon consDataConKey pRELUDE SLIT(":") + alpha_tyvar [] [alphaTy, applyTyCon listTyCon alpha_ty] listTyCon (pcGenerateDataSpecs alphaListTy) -- Interesting: polymorphic recursion would help here. -- We can't use (mkListTy alphaTy) in the defn of consDataCon, else mkListTy @@ -648,33 +617,6 @@ unitTy = mkTupleTy 0 [] %************************************************************************ %* * -\subsection[TysWiredIn-Ratios]{@Ratio@ and @Rational@} -%* * -%************************************************************************ - -ToDo: make this (mostly) go away. - -\begin{code} -rationalTy :: GenType t u - -mkRatioTy ty = applyTyCon ratioTyCon [ty] -rationalTy = mkRatioTy integerTy - -ratioTyCon = pcDataTyCon ratioTyConKey pRELUDE_RATIO SLIT("Ratio") [alphaTyVar] [ratioDataCon] - -ratioDataCon = pcDataCon ratioDataConKey pRELUDE_RATIO SLIT(":%") - [alphaTyVar] [{-(integralClass,alphaTy)-}] [alphaTy, alphaTy] ratioTyCon nullSpecEnv - -- context omitted to match lib/prelude/ defn of "data Ratio ..." - -rationalTyCon - = mkSynTyCon - (mkBuiltinName rationalTyConKey pRELUDE_RATIO SLIT("Rational")) - mkBoxedTypeKind - 0 [] rationalTy -- == mkRatioTy integerTy -\end{code} - -%************************************************************************ -%* * \subsection[TysWiredIn-_Lift]{@_Lift@ type: to support array indexing} %* * %************************************************************************ @@ -699,33 +641,16 @@ isLiftTy ty -} -alphaLiftTy = mkSigmaTy [alphaTyVar] [] (applyTyCon liftTyCon [alphaTy]) +alphaLiftTy = mkSigmaTy alpha_tyvar [] (applyTyCon liftTyCon alpha_ty) liftTyCon - = pcDataTyCon liftTyConKey pRELUDE_BUILTIN SLIT("_Lift") [alphaTyVar] [liftDataCon] + = pcDataTyCon liftTyConKey gHC__ SLIT("Lift") alpha_tyvar [liftDataCon] liftDataCon - = pcDataCon liftDataConKey pRELUDE_BUILTIN SLIT("_Lift") - [alphaTyVar] [] [alphaTy] liftTyCon + = pcDataCon liftDataConKey gHC__ SLIT("Lift") + alpha_tyvar [] alpha_ty liftTyCon ((pcGenerateDataSpecs alphaLiftTy) `addOneToSpecEnv` (mkSpecInfo [Just realWorldStatePrimTy] 0 bottom)) where bottom = panic "liftDataCon:State# _RealWorld" \end{code} - - -%************************************************************************ -%* * -\subsection[TysWiredIn-for-convenience]{Types wired in for convenience (e.g., @String@)} -%* * -%************************************************************************ - -\begin{code} -stringTy = mkListTy charTy - -stringTyCon - = mkSynTyCon - (mkBuiltinName stringTyConKey pRELUDE_CORE SLIT("String")) - mkBoxedTypeKind - 0 [] stringTy -\end{code}