GADT fixes
[ghc-hetmet.git] / compiler / prelude / TysWiredIn.lhs
index ceb4df5..ed7da33 100644 (file)
@@ -74,7 +74,10 @@ import BasicTypes    ( Arity, RecFlag(..), Boxity(..), isBoxed,
 
 import Type            ( Type, mkTyConTy, mkTyConApp, mkTyVarTy, mkTyVarTys,
                          TyThing(..) )
-import Kind            ( mkArrowKinds, liftedTypeKind, ubxTupleKind )
+import Coercion         ( unsafeCoercionTyCon, symCoercionTyCon,
+                          transCoercionTyCon, leftCoercionTyCon, 
+                          rightCoercionTyCon, instCoercionTyCon )
+import TypeRep          ( mkArrowKinds, liftedTypeKind, ubxTupleKind )
 import Unique          ( incrUnique, mkTupleTyConUnique,
                          mkTupleDataConUnique, mkPArrDataConUnique )
 import Array
@@ -97,6 +100,12 @@ names in PrelNames, so they use wTcQual, wDataQual, etc
 
 \begin{code}
 wiredInTyCons :: [TyCon]       -- Excludes tuples
+-- This list is used only to define PrelInfo.wiredInThings
+
+-- It does not need to include kind constructors, because
+-- all that wiredInThings does is to initialise the Name table,
+-- and kind constructors don't appear in source code.
+
 wiredInTyCons = [ unitTyCon    -- Not treated like other tuples, because
                                -- it's defined in GHC.Base, and there's only
                                -- one of it.  We put it in wiredInTyCons so
@@ -110,6 +119,12 @@ wiredInTyCons = [ unitTyCon        -- Not treated like other tuples, because
              , intTyCon
              , listTyCon
              , parrTyCon
+              , unsafeCoercionTyCon
+              , symCoercionTyCon
+              , transCoercionTyCon
+              , leftCoercionTyCon
+              , rightCoercionTyCon
+              , instCoercionTyCon
              ]
 \end{code}
 
@@ -128,25 +143,25 @@ mkWiredInDataConName built_in mod fs uniq datacon parent
                  (ADataCon datacon)    -- Relevant DataCon
                  built_in
 
-charTyConName    = mkWiredInTyConName   UserSyntax pREL_BASE FSLIT("Char") charTyConKey charTyCon
-charDataConName   = mkWiredInDataConName UserSyntax pREL_BASE FSLIT("C#") charDataConKey charDataCon charTyConName
-intTyConName     = mkWiredInTyConName   UserSyntax pREL_BASE FSLIT("Int") intTyConKey   intTyCon
-intDataConName   = mkWiredInDataConName UserSyntax pREL_BASE FSLIT("I#") intDataConKey  intDataCon intTyConName
+charTyConName    = mkWiredInTyConName   UserSyntax gHC_BASE FSLIT("Char") charTyConKey charTyCon
+charDataConName   = mkWiredInDataConName UserSyntax gHC_BASE FSLIT("C#") charDataConKey charDataCon charTyConName
+intTyConName     = mkWiredInTyConName   UserSyntax gHC_BASE FSLIT("Int") intTyConKey   intTyCon
+intDataConName   = mkWiredInDataConName UserSyntax gHC_BASE FSLIT("I#") intDataConKey  intDataCon intTyConName
                                                  
-boolTyConName    = mkWiredInTyConName   UserSyntax pREL_BASE FSLIT("Bool") boolTyConKey boolTyCon
-falseDataConName  = mkWiredInDataConName UserSyntax pREL_BASE FSLIT("False") falseDataConKey falseDataCon boolTyConName
-trueDataConName          = mkWiredInDataConName UserSyntax pREL_BASE FSLIT("True")  trueDataConKey  trueDataCon  boolTyConName
-listTyConName    = mkWiredInTyConName   BuiltInSyntax pREL_BASE FSLIT("[]") listTyConKey listTyCon
-nilDataConName           = mkWiredInDataConName BuiltInSyntax pREL_BASE FSLIT("[]") nilDataConKey nilDataCon  listTyConName
-consDataConName          = mkWiredInDataConName BuiltInSyntax pREL_BASE FSLIT(":") consDataConKey consDataCon listTyConName
+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
+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
 
-floatTyConName    = mkWiredInTyConName   UserSyntax pREL_FLOAT FSLIT("Float") floatTyConKey floatTyCon
-floatDataConName   = mkWiredInDataConName UserSyntax pREL_FLOAT FSLIT("F#") floatDataConKey floatDataCon floatTyConName
-doubleTyConName    = mkWiredInTyConName   UserSyntax pREL_FLOAT FSLIT("Double") doubleTyConKey doubleTyCon
-doubleDataConName  = mkWiredInDataConName UserSyntax pREL_FLOAT FSLIT("D#") doubleDataConKey doubleDataCon doubleTyConName
+floatTyConName    = mkWiredInTyConName   UserSyntax gHC_FLOAT FSLIT("Float") floatTyConKey floatTyCon
+floatDataConName   = mkWiredInDataConName UserSyntax gHC_FLOAT FSLIT("F#") floatDataConKey floatDataCon floatTyConName
+doubleTyConName    = mkWiredInTyConName   UserSyntax gHC_FLOAT FSLIT("Double") doubleTyConKey doubleTyCon
+doubleDataConName  = mkWiredInDataConName UserSyntax gHC_FLOAT FSLIT("D#") doubleDataConKey doubleDataCon doubleTyConName
 
-parrTyConName    = mkWiredInTyConName   BuiltInSyntax pREL_PARR FSLIT("[::]") parrTyConKey parrTyCon 
-parrDataConName   = mkWiredInDataConName UserSyntax    pREL_PARR FSLIT("PArr") parrDataConKey parrDataCon parrTyConName
+parrTyConName    = mkWiredInTyConName   BuiltInSyntax gHC_PARR FSLIT("[::]") parrTyConKey parrTyCon 
+parrDataConName   = mkWiredInDataConName UserSyntax    gHC_PARR FSLIT("PArr") parrDataConKey parrDataCon parrTyConName
 
 boolTyCon_RDR   = nameRdrName boolTyConName
 false_RDR      = nameRdrName falseDataConName
@@ -157,6 +172,16 @@ intDataCon_RDR     = nameRdrName intDataConName
 listTyCon_RDR  = nameRdrName listTyConName
 consDataCon_RDR = nameRdrName consDataConName
 parrTyCon_RDR  = nameRdrName parrTyConName
+{-
+tySuperKindTyCon_RDR     = nameRdrName tySuperKindTyConName
+coSuperKindTyCon_RDR = nameRdrName coSuperKindTyConName
+liftedTypeKindTyCon_RDR   = nameRdrName liftedTypeKindTyConName
+openTypeKindTyCon_RDR     = nameRdrName openTypeKindTyConName
+unliftedTypeKindTyCon_RDR = nameRdrName unliftedTypeKindTyConName
+ubxTupleKindTyCon_RDR     = nameRdrName ubxTupleKindTyConName
+argTypeKindTyCon_RDR      = nameRdrName argTypeKindTyConName
+funKindTyCon_RDR          = nameRdrName funKindTyConName
+-}
 \end{code}
 
 
@@ -182,6 +207,7 @@ pcTyCon is_enum is_rec name tyvars argvrcs cons
                []              -- No record selectors
                 is_rec
                True            -- All the wired-in tycons have generics
+               False           -- Not in GADT syntax
 
 pcDataCon :: Name -> [TyVar] -> [Type] -> TyCon -> DataCon
 pcDataCon = pcDataConWithFixity False
@@ -197,10 +223,15 @@ pcDataConWithFixity :: Bool -> Name -> [TyVar] -> [Type] -> TyCon -> DataCon
 pcDataConWithFixity declared_infix dc_name tyvars arg_tys tycon
   = data_con
   where
-    data_con = mkDataCon dc_name declared_infix True {- Vanilla -}
+    data_con = mkDataCon dc_name declared_infix
                 (map (const NotMarkedStrict) arg_tys)
-                [{- No labelled fields -}]
-                tyvars [] [] arg_tys tycon (mkTyVarTys tyvars)
+                []     -- No labelled fields
+                tyvars
+               []      -- No existential type variables
+               []      -- No equality spec
+               []      -- No theta
+               arg_tys tycon
+               []      -- No stupid theta
                (mkDataConIds bogus_wrap_name wrk_name data_con)
                
 
@@ -537,7 +568,7 @@ mkPArrFakeCon arity  = data_con
        tyvar     = head alphaTyVars
        tyvarTys  = replicate arity $ mkTyVarTy tyvar
         nameStr   = mkFastString ("MkPArr" ++ show arity)
-       name      = mkWiredInName pREL_PARR (mkOccNameFS dataName nameStr) uniq
+       name      = mkWiredInName gHC_PARR (mkOccNameFS dataName nameStr) uniq
                                  Nothing (ADataCon data_con) UserSyntax
        uniq      = mkPArrDataConUnique arity
 
@@ -547,3 +578,4 @@ isPArrFakeCon      :: DataCon -> Bool
 isPArrFakeCon dcon  = dcon == parrFakeCon (dataConSourceArity dcon)
 \end{code}
 
+