Interface file optimisation and removal of nameParent
[ghc-hetmet.git] / compiler / prelude / TysWiredIn.lhs
index ed7da33..436b121 100644 (file)
@@ -67,7 +67,8 @@ import OccName                ( mkOccNameFS, tcName, dataName, mkTupleOcc,
 import DataCon         ( DataCon, mkDataCon, dataConWorkId, dataConSourceArity )
 import Var             ( TyVar, tyVarKind )
 import TyCon           ( TyCon, AlgTyConRhs(DataTyCon), tyConDataCons,
 import DataCon         ( DataCon, mkDataCon, dataConWorkId, dataConSourceArity )
 import Var             ( TyVar, tyVarKind )
 import TyCon           ( TyCon, AlgTyConRhs(DataTyCon), tyConDataCons,
-                         mkTupleTyCon, mkAlgTyCon, tyConName )
+                         mkTupleTyCon, mkAlgTyCon, tyConName,
+                         AlgTyConParent(NoParentTyCon) )
 
 import BasicTypes      ( Arity, RecFlag(..), Boxity(..), isBoxed,
                          StrictnessMark(..) )
 
 import BasicTypes      ( Arity, RecFlag(..), Boxity(..), isBoxed,
                          StrictnessMark(..) )
@@ -132,36 +133,34 @@ wiredInTyCons = [ unitTyCon       -- Not treated like other tuples, because
 mkWiredInTyConName :: BuiltInSyntax -> Module -> FastString -> Unique -> TyCon -> Name
 mkWiredInTyConName built_in mod fs uniq tycon
   = mkWiredInName mod (mkOccNameFS tcName fs) uniq
 mkWiredInTyConName :: BuiltInSyntax -> Module -> FastString -> Unique -> TyCon -> Name
 mkWiredInTyConName built_in mod fs uniq tycon
   = mkWiredInName mod (mkOccNameFS tcName fs) uniq
-                 Nothing               -- No parent object
                  (ATyCon tycon)        -- Relevant TyCon
                  built_in
 
                  (ATyCon tycon)        -- Relevant TyCon
                  built_in
 
-mkWiredInDataConName :: BuiltInSyntax -> Module -> FastString -> Unique -> DataCon -> Name -> Name
-mkWiredInDataConName built_in mod fs uniq datacon parent
+mkWiredInDataConName :: BuiltInSyntax -> Module -> FastString -> Unique -> DataCon -> Name
+mkWiredInDataConName built_in mod fs uniq datacon
   = mkWiredInName mod (mkOccNameFS dataName fs) uniq
   = mkWiredInName mod (mkOccNameFS dataName fs) uniq
-                 (Just parent)         -- Name of parent TyCon
                  (ADataCon datacon)    -- Relevant DataCon
                  built_in
 
 charTyConName    = mkWiredInTyConName   UserSyntax gHC_BASE FSLIT("Char") charTyConKey charTyCon
                  (ADataCon datacon)    -- Relevant DataCon
                  built_in
 
 charTyConName    = mkWiredInTyConName   UserSyntax gHC_BASE FSLIT("Char") charTyConKey charTyCon
-charDataConName   = mkWiredInDataConName UserSyntax gHC_BASE FSLIT("C#") charDataConKey charDataCon charTyConName
+charDataConName   = mkWiredInDataConName UserSyntax gHC_BASE FSLIT("C#") charDataConKey charDataCon
 intTyConName     = mkWiredInTyConName   UserSyntax gHC_BASE FSLIT("Int") intTyConKey   intTyCon
 intTyConName     = mkWiredInTyConName   UserSyntax gHC_BASE FSLIT("Int") intTyConKey   intTyCon
-intDataConName   = mkWiredInDataConName UserSyntax gHC_BASE FSLIT("I#") intDataConKey  intDataCon intTyConName
+intDataConName   = mkWiredInDataConName UserSyntax gHC_BASE FSLIT("I#") intDataConKey  intDataCon
                                                  
 boolTyConName    = mkWiredInTyConName   UserSyntax gHC_BASE FSLIT("Bool") boolTyConKey boolTyCon
                                                  
 boolTyConName    = mkWiredInTyConName   UserSyntax gHC_BASE FSLIT("Bool") boolTyConKey boolTyCon
-falseDataConName  = mkWiredInDataConName UserSyntax gHC_BASE FSLIT("False") falseDataConKey falseDataCon boolTyConName
-trueDataConName          = mkWiredInDataConName UserSyntax gHC_BASE FSLIT("True")  trueDataConKey  trueDataCon  boolTyConName
+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
 listTyConName    = mkWiredInTyConName   BuiltInSyntax gHC_BASE FSLIT("[]") listTyConKey listTyCon
-nilDataConName           = mkWiredInDataConName BuiltInSyntax gHC_BASE FSLIT("[]") nilDataConKey nilDataCon  listTyConName
-consDataConName          = mkWiredInDataConName BuiltInSyntax gHC_BASE FSLIT(":") consDataConKey consDataCon listTyConName
+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
 
 floatTyConName    = mkWiredInTyConName   UserSyntax gHC_FLOAT FSLIT("Float") floatTyConKey floatTyCon
-floatDataConName   = mkWiredInDataConName UserSyntax gHC_FLOAT FSLIT("F#") floatDataConKey floatDataCon floatTyConName
+floatDataConName   = mkWiredInDataConName UserSyntax gHC_FLOAT FSLIT("F#") floatDataConKey floatDataCon
 doubleTyConName    = mkWiredInTyConName   UserSyntax gHC_FLOAT FSLIT("Double") doubleTyConKey doubleTyCon
 doubleTyConName    = mkWiredInTyConName   UserSyntax gHC_FLOAT FSLIT("Double") doubleTyConKey doubleTyCon
-doubleDataConName  = mkWiredInDataConName UserSyntax gHC_FLOAT FSLIT("D#") doubleDataConKey doubleDataCon doubleTyConName
+doubleDataConName  = mkWiredInDataConName UserSyntax gHC_FLOAT FSLIT("D#") doubleDataConKey doubleDataCon
 
 parrTyConName    = mkWiredInTyConName   BuiltInSyntax gHC_PARR FSLIT("[::]") parrTyConKey parrTyCon 
 
 parrTyConName    = mkWiredInTyConName   BuiltInSyntax gHC_PARR FSLIT("[::]") parrTyConKey parrTyCon 
-parrDataConName   = mkWiredInDataConName UserSyntax    gHC_PARR FSLIT("PArr") parrDataConKey parrDataCon parrTyConName
+parrDataConName   = mkWiredInDataConName UserSyntax    gHC_PARR FSLIT("PArr") parrDataConKey parrDataCon
 
 boolTyCon_RDR   = nameRdrName boolTyConName
 false_RDR      = nameRdrName falseDataConName
 
 boolTyCon_RDR   = nameRdrName boolTyConName
 false_RDR      = nameRdrName falseDataConName
@@ -195,16 +194,16 @@ funKindTyCon_RDR          = nameRdrName funKindTyConName
 pcNonRecDataTyCon = pcTyCon False NonRecursive
 pcRecDataTyCon    = pcTyCon False Recursive
 
 pcNonRecDataTyCon = pcTyCon False NonRecursive
 pcRecDataTyCon    = pcTyCon False Recursive
 
-pcTyCon is_enum is_rec name tyvars argvrcs cons
+pcTyCon is_enum is_rec name tyvars cons
   = tycon
   where
     tycon = mkAlgTyCon name
                (mkArrowKinds (map tyVarKind tyvars) liftedTypeKind)
                 tyvars
   = tycon
   where
     tycon = mkAlgTyCon name
                (mkArrowKinds (map tyVarKind tyvars) liftedTypeKind)
                 tyvars
-                argvrcs
                 []             -- No stupid theta
                (DataTyCon cons is_enum)
                []              -- No record selectors
                 []             -- No stupid theta
                (DataTyCon cons is_enum)
                []              -- No record selectors
+               NoParentTyCon
                 is_rec
                True            -- All the wired-in tycons have generics
                False           -- Not in GADT syntax
                 is_rec
                True            -- All the wired-in tycons have generics
                False           -- Not in GADT syntax
@@ -239,7 +238,6 @@ pcDataConWithFixity declared_infix dc_name tyvars arg_tys tycon
     wrk_occ  = mkDataConWorkerOcc (nameOccName dc_name)
     wrk_key  = incrUnique (nameUnique dc_name)
     wrk_name = mkWiredInName mod wrk_occ wrk_key
     wrk_occ  = mkDataConWorkerOcc (nameOccName dc_name)
     wrk_key  = incrUnique (nameUnique dc_name)
     wrk_name = mkWiredInName mod wrk_occ wrk_key
-                            (Just (tyConName tycon))
                             (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
                             (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
@@ -273,7 +271,7 @@ mk_tuple boxity arity = (tycon, tuple_con)
        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
        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
-                               Nothing (ATyCon tycon) BuiltInSyntax
+                               (ATyCon tycon) BuiltInSyntax
        tc_kind = mkArrowKinds (map tyVarKind tyvars) res_kind
        res_kind | isBoxed boxity = liftedTypeKind
                 | otherwise      = ubxTupleKind
        tc_kind = mkArrowKinds (map tyVarKind tyvars) res_kind
        res_kind | isBoxed boxity = liftedTypeKind
                 | otherwise      = ubxTupleKind
@@ -284,7 +282,7 @@ 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
        tuple_con = pcDataCon dc_name tyvars tyvar_tys tycon
        tyvar_tys = mkTyVarTys tyvars
        dc_name   = mkWiredInName mod (mkTupleOcc dataName boxity arity) dc_uniq
-                                 (Just tc_name) (ADataCon tuple_con) BuiltInSyntax
+                                 (ADataCon tuple_con) BuiltInSyntax
        tc_uniq   = mkTupleTyConUnique   boxity arity
        dc_uniq   = mkTupleDataConUnique boxity arity
        gen_info  = True                -- Tuples all have generics..
        tc_uniq   = mkTupleTyConUnique   boxity arity
        dc_uniq   = mkTupleDataConUnique boxity arity
        gen_info  = True                -- Tuples all have generics..
@@ -328,7 +326,7 @@ voidTy = unitTy
 \begin{code}
 charTy = mkTyConTy charTyCon
 
 \begin{code}
 charTy = mkTyConTy charTyCon
 
-charTyCon   = pcNonRecDataTyCon charTyConName [] [] [charDataCon]
+charTyCon   = pcNonRecDataTyCon charTyConName [] [charDataCon]
 charDataCon = pcDataCon charDataConName [] [charPrimTy] charTyCon
 
 stringTy = mkListTy charTy -- convenience only
 charDataCon = pcDataCon charDataConName [] [charPrimTy] charTyCon
 
 stringTy = mkListTy charTy -- convenience only
@@ -337,21 +335,21 @@ stringTy = mkListTy charTy -- convenience only
 \begin{code}
 intTy = mkTyConTy intTyCon 
 
 \begin{code}
 intTy = mkTyConTy intTyCon 
 
-intTyCon = pcNonRecDataTyCon intTyConName [] [] [intDataCon]
+intTyCon = pcNonRecDataTyCon intTyConName [] [intDataCon]
 intDataCon = pcDataCon intDataConName [] [intPrimTy] intTyCon
 \end{code}
 
 \begin{code}
 floatTy        = mkTyConTy floatTyCon
 
 intDataCon = pcDataCon intDataConName [] [intPrimTy] intTyCon
 \end{code}
 
 \begin{code}
 floatTy        = mkTyConTy floatTyCon
 
-floatTyCon   = pcNonRecDataTyCon floatTyConName   [] [] [floatDataCon]
+floatTyCon   = pcNonRecDataTyCon floatTyConName   [] [floatDataCon]
 floatDataCon = pcDataCon         floatDataConName [] [floatPrimTy] floatTyCon
 \end{code}
 
 \begin{code}
 doubleTy = mkTyConTy doubleTyCon
 
 floatDataCon = pcDataCon         floatDataConName [] [floatPrimTy] floatTyCon
 \end{code}
 
 \begin{code}
 doubleTy = mkTyConTy doubleTyCon
 
-doubleTyCon   = pcNonRecDataTyCon doubleTyConName   [] [] [doubleDataCon]
+doubleTyCon   = pcNonRecDataTyCon doubleTyConName   [] [doubleDataCon]
 doubleDataCon = pcDataCon        doubleDataConName [] [doublePrimTy] doubleTyCon
 \end{code}
 
 doubleDataCon = pcDataCon        doubleDataConName [] [doublePrimTy] doubleTyCon
 \end{code}
 
@@ -408,7 +406,7 @@ primitive counterpart.
 boolTy = mkTyConTy boolTyCon
 
 boolTyCon = pcTyCon True NonRecursive boolTyConName
 boolTy = mkTyConTy boolTyCon
 
 boolTyCon = pcTyCon True NonRecursive boolTyConName
-                   [] [] [falseDataCon, trueDataCon]
+                   [] [falseDataCon, trueDataCon]
 
 falseDataCon = pcDataCon falseDataConName [] [] boolTyCon
 trueDataCon  = pcDataCon trueDataConName  [] [] boolTyCon
 
 falseDataCon = pcDataCon falseDataConName [] [] boolTyCon
 trueDataCon  = pcDataCon trueDataConName  [] [] boolTyCon
@@ -436,8 +434,7 @@ data (,) a b = (,,) a b
 mkListTy :: Type -> Type
 mkListTy ty = mkTyConApp listTyCon [ty]
 
 mkListTy :: Type -> Type
 mkListTy ty = mkTyConApp listTyCon [ty]
 
-listTyCon = pcRecDataTyCon listTyConName
-                       alpha_tyvar [(True,False)] [nilDataCon, consDataCon]
+listTyCon = pcRecDataTyCon listTyConName alpha_tyvar [nilDataCon, consDataCon]
 
 nilDataCon  = pcDataCon nilDataConName alpha_tyvar [] listTyCon
 consDataCon = pcDataConWithFixity True {- Declared infix -}
 
 nilDataCon  = pcDataCon nilDataConName alpha_tyvar [] listTyCon
 consDataCon = pcDataConWithFixity True {- Declared infix -}
@@ -525,7 +522,7 @@ mkPArrTy ty  = mkTyConApp parrTyCon [ty]
 --     `PrelPArr'.
 --
 parrTyCon :: TyCon
 --     `PrelPArr'.
 --
 parrTyCon :: TyCon
-parrTyCon  = pcNonRecDataTyCon parrTyConName alpha_tyvar [(True, False)] [parrDataCon]
+parrTyCon  = pcNonRecDataTyCon parrTyConName alpha_tyvar [parrDataCon]
 
 parrDataCon :: DataCon
 parrDataCon  = pcDataCon 
 
 parrDataCon :: DataCon
 parrDataCon  = pcDataCon 
@@ -569,7 +566,7 @@ mkPArrFakeCon arity  = data_con
        tyvarTys  = replicate arity $ mkTyVarTy tyvar
         nameStr   = mkFastString ("MkPArr" ++ show arity)
        name      = mkWiredInName gHC_PARR (mkOccNameFS dataName nameStr) uniq
        tyvarTys  = replicate arity $ mkTyVarTy tyvar
         nameStr   = mkFastString ("MkPArr" ++ show arity)
        name      = mkWiredInName gHC_PARR (mkOccNameFS dataName nameStr) uniq
-                                 Nothing (ADataCon data_con) UserSyntax
+                                 (ADataCon data_con) UserSyntax
        uniq      = mkPArrDataConUnique arity
 
 -- checks whether a data constructor is a fake constructor for parallel arrays
        uniq      = mkPArrDataConUnique arity
 
 -- checks whether a data constructor is a fake constructor for parallel arrays