Add ASSERTs to all calls of nameModule
[ghc-hetmet.git] / compiler / prelude / TysWiredIn.lhs
index 7606ff6..b2f5b3f 100644 (file)
@@ -3,52 +3,61 @@
 %
 \section[TysWiredIn]{Wired-in knowledge about {\em non-primitive} types}
 
-This module is about types that can be defined in Haskell, but which
-must be wired into the compiler nonetheless.
-
 This module tracks the ``state interface'' document, ``GHC prelude:
 types and operations.''
 
 \begin{code}
+-- | This module is about types that can be defined in Haskell, but which
+-- must be wired into the compiler nonetheless.
 module TysWiredIn (
+        -- * All wired in things
        wiredInTyCons, 
 
+        -- * Bool
        boolTy, boolTyCon, boolTyCon_RDR, boolTyConName,
        trueDataCon,  trueDataConId,  true_RDR,
        falseDataCon, falseDataConId, false_RDR,
 
+        -- * Char
        charTyCon, charDataCon, charTyCon_RDR,
        charTy, stringTy, charTyConName,
 
-       
+       -- * Double
        doubleTyCon, doubleDataCon, doubleTy, doubleTyConName, 
        
+       -- * Float
        floatTyCon, floatDataCon, floatTy, floatTyConName,
 
+        -- * Int
        intTyCon, intDataCon, intTyCon_RDR, intDataCon_RDR, intTyConName,
        intTy,
 
+        -- * Word
+       wordTyCon, wordDataCon, wordTyConName, wordTy,
+
+        -- * List
        listTyCon, nilDataCon, consDataCon,
        listTyCon_RDR, consDataCon_RDR, listTyConName,
        mkListTy,
 
-       -- tuples
+       -- * Tuples
        mkTupleTy,
        tupleTyCon, tupleCon, 
        unitTyCon, unitDataCon, unitDataConId, pairTyCon, 
        unboxedSingletonTyCon, unboxedSingletonDataCon,
        unboxedPairTyCon, unboxedPairDataCon,
-       
-        boxedTupleArr, unboxedTupleArr,
 
+        -- * Unit
        unitTy,
 
-        -- parallel arrays
+        -- * Parallel arrays
        mkPArrTy,
        parrTyCon, parrFakeCon, isPArrTyCon, isPArrFakeCon,
        parrTyCon_RDR, parrTyConName
     ) where
 
+#include "HsVersions.h"
+
 import {-# SOURCE #-} MkId( mkDataConIds )
 
 -- friends:
@@ -59,10 +68,9 @@ import TysPrim
 import Constants       ( mAX_TUPLE_SIZE )
 import Module          ( Module )
 import RdrName
-import Name            ( Name, BuiltInSyntax(..), nameUnique, nameOccName, 
-                         nameModule, mkWiredInName )
-import OccName         ( mkOccNameFS, tcName, dataName, mkTupleOcc,
-                         mkDataConWorkerOcc )
+import Name
+import OccName         ( mkTcOccFS, mkDataOccFS, mkTupleOcc, mkDataConWorkerOcc,
+                         tcName, dataName )
 import DataCon         ( DataCon, mkDataCon, dataConWorkId, dataConSourceArity )
 import Var
 import TyCon           ( TyCon, AlgTyConRhs(DataTyCon), tyConDataCons,
@@ -134,21 +142,21 @@ wiredInTyCons = [ unitTyCon       -- Not treated like other tuples, because
 \begin{code}
 mkWiredInTyConName :: BuiltInSyntax -> Module -> FastString -> Unique -> TyCon -> Name
 mkWiredInTyConName built_in modu fs unique tycon
-  = mkWiredInName modu (mkOccNameFS tcName fs) unique
+  = mkWiredInName modu (mkTcOccFS fs) unique
                  (ATyCon tycon)        -- Relevant TyCon
                  built_in
 
 mkWiredInDataConName :: BuiltInSyntax -> Module -> FastString -> Unique -> DataCon -> Name
 mkWiredInDataConName built_in modu fs unique datacon
-  = mkWiredInName modu (mkOccNameFS dataName fs) unique
+  = mkWiredInName modu (mkDataOccFS fs) unique
                  (ADataCon datacon)    -- Relevant DataCon
                  built_in
 
 charTyConName, charDataConName, intTyConName, intDataConName :: Name
-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
+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
@@ -156,15 +164,15 @@ falseDataConName  = mkWiredInDataConName UserSyntax gHC_BOOL (fsLit "False") fal
 trueDataConName          = mkWiredInDataConName UserSyntax gHC_BOOL (fsLit "True")  trueDataConKey  trueDataCon 
 
 listTyConName, nilDataConName, consDataConName :: Name
-listTyConName    = mkWiredInTyConName   BuiltInSyntax gHC_BASE (fsLit "[]") listTyConKey listTyCon
-nilDataConName           = mkWiredInDataConName BuiltInSyntax gHC_BASE (fsLit "[]") nilDataConKey nilDataCon 
-consDataConName          = mkWiredInDataConName BuiltInSyntax gHC_BASE (fsLit ":") consDataConKey consDataCon
+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_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
+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 
@@ -247,7 +255,8 @@ pcDataConWithFixity declared_infix dc_name tyvars arg_tys tycon
                (mkDataConIds bogus_wrap_name wrk_name data_con)
                
 
-    modu      = nameModule dc_name
+    modu     = ASSERT( isExternalName dc_name ) 
+              nameModule dc_name
     wrk_occ  = mkDataConWorkerOcc (nameOccName dc_name)
     wrk_key  = incrUnique (nameUnique dc_name)
     wrk_name = mkWiredInName modu wrk_occ wrk_key
@@ -352,6 +361,16 @@ 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
 
@@ -462,6 +481,7 @@ listTyCon = pcRecDataTyCon listTyConName alpha_tyvar [nilDataCon, consDataCon]
 
 nilDataCon :: DataCon
 nilDataCon  = pcDataCon nilDataConName alpha_tyvar [] listTyCon
+
 consDataCon :: DataCon
 consDataCon = pcDataConWithFixity True {- Declared infix -}
               consDataConName
@@ -534,19 +554,17 @@ unitTy = mkTupleTy Boxed 0 []
 Special syntax for parallel arrays needs some wired in definitions.
 
 \begin{code}
--- construct a type representing the application of the parallel array
--- constructor 
---
+-- | Construct a type representing the application of the parallel array constructor 
 mkPArrTy    :: Type -> Type
 mkPArrTy ty  = mkTyConApp parrTyCon [ty]
 
--- represents the type constructor of parallel arrays
+-- | Represents the type constructor of parallel arrays
 --
---  * this must match the definition in `PrelPArr'
+--  * This must match the definition in @PrelPArr@
 --
 -- NB: Although the constructor is given here, it will not be accessible in
 --     user code as it is not in the environment of any compiled module except
---     `PrelPArr'.
+--     @PrelPArr@.
 --
 parrTyCon :: TyCon
 parrTyCon  = pcNonRecDataTyCon parrTyConName alpha_tyvar [parrDataCon]
@@ -561,14 +579,13 @@ parrDataCon  = pcDataCon
                    alpha_ty] 
                 parrTyCon
 
--- check whether a type constructor is the constructor for parallel arrays
---
+-- | Check whether a type constructor is the constructor for parallel arrays
 isPArrTyCon    :: TyCon -> Bool
 isPArrTyCon tc  = tyConName tc == parrTyConName
 
--- fake array constructors
+-- | Fake array constructors
 --
---  * these constructors are never really used to represent array values;
+-- * These constructors are never really used to represent array values;
 --   however, they are very convenient during desugaring (and, in particular,
 --   in the pattern matching compiler) to treat array pattern just like
 --   yet another constructor pattern
@@ -592,12 +609,11 @@ mkPArrFakeCon arity  = data_con
        tyvar     = head alphaTyVars
        tyvarTys  = replicate arity $ mkTyVarTy tyvar
         nameStr   = mkFastString ("MkPArr" ++ show arity)
-       name      = mkWiredInName gHC_PARR (mkOccNameFS dataName nameStr) unique
+       name      = mkWiredInName gHC_PARR (mkDataOccFS nameStr) unique
                                  (ADataCon data_con) UserSyntax
        unique      = mkPArrDataConUnique arity
 
--- checks whether a data constructor is a fake constructor for parallel arrays
---
+-- | Checks whether a data constructor is a fake constructor for parallel arrays
 isPArrFakeCon      :: DataCon -> Bool
 isPArrFakeCon dcon  = dcon == parrFakeCon (dataConSourceArity dcon)
 \end{code}