X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fprelude%2FTysWiredIn.lhs;h=6c139254ddabc2ebdd0468c3fbaf546fe985e1b0;hb=bbc583766a08678d03740354bed216e268306356;hp=d224d7b8e38ecd4753c97147cfe5694fddf4cfb6;hpb=c128930dc98c73e2459a4610539fee73ca941247;p=ghc-hetmet.git diff --git a/compiler/prelude/TysWiredIn.lhs b/compiler/prelude/TysWiredIn.lhs index d224d7b..6c13925 100644 --- a/compiler/prelude/TysWiredIn.lhs +++ b/compiler/prelude/TysWiredIn.lhs @@ -28,6 +28,8 @@ module TysWiredIn ( intTyCon, intDataCon, intTyCon_RDR, intDataCon_RDR, intTyConName, intTy, + wordTyCon, wordDataCon, wordTyConName, wordTy, + listTyCon, nilDataCon, consDataCon, listTyCon_RDR, consDataCon_RDR, listTyConName, mkListTy, @@ -38,6 +40,8 @@ module TysWiredIn ( unitTyCon, unitDataCon, unitDataConId, pairTyCon, unboxedSingletonTyCon, unboxedSingletonDataCon, unboxedPairTyCon, unboxedPairDataCon, + + boxedTupleArr, unboxedTupleArr, unitTy, @@ -47,8 +51,6 @@ module TysWiredIn ( parrTyCon_RDR, parrTyConName ) where -#include "HsVersions.h" - import {-# SOURCE #-} MkId( mkDataConIds ) -- friends: @@ -58,16 +60,16 @@ import TysPrim -- others: import Constants ( mAX_TUPLE_SIZE ) import Module ( Module ) -import RdrName ( nameRdrName ) +import RdrName import Name ( Name, BuiltInSyntax(..), nameUnique, nameOccName, nameModule, mkWiredInName ) import OccName ( mkOccNameFS, tcName, dataName, mkTupleOcc, mkDataConWorkerOcc ) import DataCon ( DataCon, mkDataCon, dataConWorkId, dataConSourceArity ) -import Var ( TyVar, tyVarKind ) +import Var import TyCon ( TyCon, AlgTyConRhs(DataTyCon), tyConDataCons, mkTupleTyCon, mkAlgTyCon, tyConName, - AlgTyConParent(NoParentTyCon) ) + TyConParent(NoParentTyCon) ) import BasicTypes ( Arity, RecFlag(..), Boxity(..), isBoxed, StrictnessMark(..) ) @@ -84,8 +86,11 @@ import Array import FastString import Outputable +alpha_tyvar :: [TyVar] alpha_tyvar = [alphaTyVar] -alpha_ty = [alphaTy] + +alpha_ty :: [Type] +alpha_ty = [alphaTy] \end{code} @@ -130,37 +135,45 @@ wiredInTyCons = [ unitTyCon -- Not treated like other tuples, because \begin{code} mkWiredInTyConName :: BuiltInSyntax -> Module -> FastString -> Unique -> TyCon -> Name -mkWiredInTyConName built_in mod fs uniq tycon - = mkWiredInName mod (mkOccNameFS tcName fs) uniq +mkWiredInTyConName built_in modu fs unique tycon + = mkWiredInName modu (mkOccNameFS tcName fs) unique (ATyCon tycon) -- Relevant TyCon built_in mkWiredInDataConName :: BuiltInSyntax -> Module -> FastString -> Unique -> DataCon -> Name -mkWiredInDataConName built_in mod fs uniq datacon - = mkWiredInName mod (mkOccNameFS dataName fs) uniq +mkWiredInDataConName built_in modu fs unique datacon + = mkWiredInName modu (mkOccNameFS dataName fs) unique (ADataCon datacon) -- Relevant DataCon built_in -charTyConName = mkWiredInTyConName UserSyntax gHC_BASE FSLIT("Char") charTyConKey charTyCon -charDataConName = mkWiredInDataConName UserSyntax gHC_BASE FSLIT("C#") charDataConKey charDataCon -intTyConName = mkWiredInTyConName UserSyntax gHC_BASE FSLIT("Int") intTyConKey intTyCon -intDataConName = mkWiredInDataConName UserSyntax gHC_BASE FSLIT("I#") intDataConKey intDataCon - -boolTyConName = mkWiredInTyConName UserSyntax gHC_BASE FSLIT("Bool") boolTyConKey boolTyCon -falseDataConName = mkWiredInDataConName UserSyntax gHC_BASE FSLIT("False") falseDataConKey falseDataCon -trueDataConName = mkWiredInDataConName UserSyntax gHC_BASE FSLIT("True") trueDataConKey trueDataCon -listTyConName = mkWiredInTyConName BuiltInSyntax gHC_BASE FSLIT("[]") listTyConKey listTyCon -nilDataConName = mkWiredInDataConName BuiltInSyntax gHC_BASE FSLIT("[]") nilDataConKey nilDataCon -consDataConName = mkWiredInDataConName BuiltInSyntax gHC_BASE FSLIT(":") consDataConKey consDataCon - -floatTyConName = mkWiredInTyConName UserSyntax gHC_FLOAT FSLIT("Float") floatTyConKey floatTyCon -floatDataConName = mkWiredInDataConName UserSyntax gHC_FLOAT FSLIT("F#") floatDataConKey floatDataCon -doubleTyConName = mkWiredInTyConName UserSyntax gHC_FLOAT FSLIT("Double") doubleTyConKey doubleTyCon -doubleDataConName = mkWiredInDataConName UserSyntax gHC_FLOAT FSLIT("D#") doubleDataConKey doubleDataCon - -parrTyConName = mkWiredInTyConName BuiltInSyntax gHC_PARR FSLIT("[::]") parrTyConKey parrTyCon -parrDataConName = mkWiredInDataConName UserSyntax gHC_PARR FSLIT("PArr") parrDataConKey parrDataCon - +charTyConName, charDataConName, intTyConName, intDataConName :: Name +charTyConName = mkWiredInTyConName UserSyntax gHC_TYPES (fsLit "Char") charTyConKey charTyCon +charDataConName = mkWiredInDataConName UserSyntax gHC_TYPES (fsLit "C#") charDataConKey charDataCon +intTyConName = mkWiredInTyConName UserSyntax gHC_TYPES (fsLit "Int") intTyConKey intTyCon +intDataConName = mkWiredInDataConName UserSyntax gHC_TYPES (fsLit "I#") intDataConKey intDataCon + +boolTyConName, falseDataConName, trueDataConName :: Name +boolTyConName = mkWiredInTyConName UserSyntax gHC_BOOL (fsLit "Bool") boolTyConKey boolTyCon +falseDataConName = mkWiredInDataConName UserSyntax gHC_BOOL (fsLit "False") falseDataConKey falseDataCon +trueDataConName = mkWiredInDataConName UserSyntax gHC_BOOL (fsLit "True") trueDataConKey trueDataCon + +listTyConName, nilDataConName, consDataConName :: Name +listTyConName = mkWiredInTyConName BuiltInSyntax gHC_TYPES (fsLit "[]") listTyConKey listTyCon +nilDataConName = mkWiredInDataConName BuiltInSyntax gHC_TYPES (fsLit "[]") nilDataConKey nilDataCon +consDataConName = mkWiredInDataConName BuiltInSyntax gHC_TYPES (fsLit ":") consDataConKey consDataCon + +floatTyConName, floatDataConName, doubleTyConName, doubleDataConName :: Name +floatTyConName = mkWiredInTyConName UserSyntax gHC_TYPES (fsLit "Float") floatTyConKey floatTyCon +floatDataConName = mkWiredInDataConName UserSyntax gHC_TYPES (fsLit "F#") floatDataConKey floatDataCon +doubleTyConName = mkWiredInTyConName UserSyntax gHC_TYPES (fsLit "Double") doubleTyConKey doubleTyCon +doubleDataConName = mkWiredInDataConName UserSyntax gHC_TYPES (fsLit "D#") doubleDataConKey doubleDataCon + +parrTyConName, parrDataConName :: Name +parrTyConName = mkWiredInTyConName BuiltInSyntax gHC_PARR (fsLit "[::]") parrTyConKey parrTyCon +parrDataConName = mkWiredInDataConName UserSyntax gHC_PARR (fsLit "PArr") parrDataConKey parrDataCon + +boolTyCon_RDR, false_RDR, true_RDR, intTyCon_RDR, charTyCon_RDR, + intDataCon_RDR, listTyCon_RDR, consDataCon_RDR, parrTyCon_RDR:: RdrName boolTyCon_RDR = nameRdrName boolTyConName false_RDR = nameRdrName falseDataConName true_RDR = nameRdrName trueDataConName @@ -190,9 +203,12 @@ funKindTyCon_RDR = nameRdrName funKindTyConName %************************************************************************ \begin{code} +pcNonRecDataTyCon :: Name -> [TyVar] -> [DataCon] -> TyCon pcNonRecDataTyCon = pcTyCon False NonRecursive +pcRecDataTyCon :: Name -> [TyVar] -> [DataCon] -> TyCon pcRecDataTyCon = pcTyCon False Recursive +pcTyCon :: Bool -> RecFlag -> Name -> [TyVar] -> [DataCon] -> TyCon pcTyCon is_enum is_rec name tyvars cons = tycon where @@ -233,10 +249,10 @@ pcDataConWithFixity declared_infix dc_name tyvars arg_tys tycon (mkDataConIds bogus_wrap_name wrk_name data_con) - mod = nameModule dc_name + modu = nameModule dc_name wrk_occ = mkDataConWorkerOcc (nameOccName dc_name) wrk_key = incrUnique (nameUnique dc_name) - wrk_name = mkWiredInName mod wrk_occ wrk_key + wrk_name = mkWiredInName modu wrk_occ wrk_key (AnId (dataConWorkId data_con)) UserSyntax bogus_wrap_name = pprPanic "Wired-in data wrapper id" (ppr dc_name) -- Wired-in types are too simple to need wrappers @@ -268,8 +284,8 @@ mk_tuple :: Boxity -> Int -> (TyCon,DataCon) mk_tuple boxity arity = (tycon, tuple_con) where tycon = mkTupleTyCon tc_name tc_kind arity tyvars tuple_con boxity gen_info - mod = mkTupleModule boxity arity - tc_name = mkWiredInName mod (mkTupleOcc tcName boxity arity) tc_uniq + modu = mkTupleModule boxity arity + tc_name = mkWiredInName modu (mkTupleOcc tcName boxity arity) tc_uniq (ATyCon tycon) BuiltInSyntax tc_kind = mkArrowKinds (map tyVarKind tyvars) res_kind res_kind | isBoxed boxity = liftedTypeKind @@ -280,23 +296,31 @@ mk_tuple boxity arity = (tycon, tuple_con) tuple_con = pcDataCon dc_name tyvars tyvar_tys tycon tyvar_tys = mkTyVarTys tyvars - dc_name = mkWiredInName mod (mkTupleOcc dataName boxity arity) dc_uniq + dc_name = mkWiredInName modu (mkTupleOcc dataName boxity arity) dc_uniq (ADataCon tuple_con) BuiltInSyntax tc_uniq = mkTupleTyConUnique boxity arity dc_uniq = mkTupleDataConUnique boxity arity gen_info = True -- Tuples all have generics.. -- hmm: that's a *lot* of code +unitTyCon :: TyCon unitTyCon = tupleTyCon Boxed 0 +unitDataCon :: DataCon unitDataCon = head (tyConDataCons unitTyCon) +unitDataConId :: Id unitDataConId = dataConWorkId unitDataCon +pairTyCon :: TyCon pairTyCon = tupleTyCon Boxed 2 +unboxedSingletonTyCon :: TyCon unboxedSingletonTyCon = tupleTyCon Unboxed 1 +unboxedSingletonDataCon :: DataCon unboxedSingletonDataCon = tupleCon Unboxed 1 +unboxedPairTyCon :: TyCon unboxedPairTyCon = tupleTyCon Unboxed 2 +unboxedPairDataCon :: DataCon unboxedPairDataCon = tupleCon Unboxed 2 \end{code} @@ -307,33 +331,57 @@ unboxedPairDataCon = tupleCon Unboxed 2 %************************************************************************ \begin{code} +charTy :: Type charTy = mkTyConTy charTyCon +charTyCon :: TyCon charTyCon = pcNonRecDataTyCon charTyConName [] [charDataCon] +charDataCon :: DataCon charDataCon = pcDataCon charDataConName [] [charPrimTy] charTyCon +stringTy :: Type stringTy = mkListTy charTy -- convenience only \end{code} \begin{code} +intTy :: Type intTy = mkTyConTy intTyCon +intTyCon :: TyCon intTyCon = pcNonRecDataTyCon intTyConName [] [intDataCon] +intDataCon :: DataCon intDataCon = pcDataCon intDataConName [] [intPrimTy] intTyCon \end{code} \begin{code} +wordTy :: Type +wordTy = mkTyConTy wordTyCon + +wordTyCon :: TyCon +wordTyCon = pcNonRecDataTyCon wordTyConName [] [wordDataCon] +wordDataCon :: DataCon +wordDataCon = pcDataCon wordDataConName [] [wordPrimTy] wordTyCon +\end{code} + +\begin{code} +floatTy :: Type floatTy = mkTyConTy floatTyCon +floatTyCon :: TyCon floatTyCon = pcNonRecDataTyCon floatTyConName [] [floatDataCon] +floatDataCon :: DataCon floatDataCon = pcDataCon floatDataConName [] [floatPrimTy] floatTyCon \end{code} \begin{code} +doubleTy :: Type doubleTy = mkTyConTy doubleTyCon -doubleTyCon = pcNonRecDataTyCon doubleTyConName [] [doubleDataCon] -doubleDataCon = pcDataCon doubleDataConName [] [doublePrimTy] doubleTyCon +doubleTyCon :: TyCon +doubleTyCon = pcNonRecDataTyCon doubleTyConName [] [doubleDataCon] + +doubleDataCon :: DataCon +doubleDataCon = pcDataCon doubleDataConName [] [doublePrimTy] doubleTyCon \end{code} @@ -386,14 +434,18 @@ primitive counterpart. {\em END IDLE SPECULATION BY SIMON} \begin{code} +boolTy :: Type boolTy = mkTyConTy boolTyCon +boolTyCon :: TyCon boolTyCon = pcTyCon True NonRecursive boolTyConName [] [falseDataCon, trueDataCon] +falseDataCon, trueDataCon :: DataCon falseDataCon = pcDataCon falseDataConName [] [] boolTyCon trueDataCon = pcDataCon trueDataConName [] [] boolTyCon +falseDataConId, trueDataConId :: Id falseDataConId = dataConWorkId falseDataCon trueDataConId = dataConWorkId trueDataCon \end{code} @@ -417,9 +469,12 @@ data (,) a b = (,,) a b mkListTy :: Type -> Type mkListTy ty = mkTyConApp listTyCon [ty] +listTyCon :: TyCon listTyCon = pcRecDataTyCon listTyConName alpha_tyvar [nilDataCon, consDataCon] +nilDataCon :: DataCon nilDataCon = pcDataCon nilDataConName alpha_tyvar [] listTyCon +consDataCon :: DataCon consDataCon = pcDataConWithFixity True {- Declared infix -} consDataConName alpha_tyvar [alphaTy, mkTyConApp listTyCon alpha_ty] listTyCon @@ -478,7 +533,8 @@ done by enumeration\srcloc{lib/prelude/InTup?.hs}. mkTupleTy :: Boxity -> Int -> [Type] -> Type mkTupleTy boxity arity tys = mkTyConApp (tupleTyCon boxity arity) tys -unitTy = mkTupleTy Boxed 0 [] +unitTy :: Type +unitTy = mkTupleTy Boxed 0 [] \end{code} %************************************************************************ @@ -548,9 +604,9 @@ mkPArrFakeCon arity = data_con tyvar = head alphaTyVars tyvarTys = replicate arity $ mkTyVarTy tyvar nameStr = mkFastString ("MkPArr" ++ show arity) - name = mkWiredInName gHC_PARR (mkOccNameFS dataName nameStr) uniq + name = mkWiredInName gHC_PARR (mkOccNameFS dataName nameStr) unique (ADataCon data_con) UserSyntax - uniq = mkPArrDataConUnique arity + unique = mkPArrDataConUnique arity -- checks whether a data constructor is a fake constructor for parallel arrays --