Add (a) CoreM monad, (b) new Annotations feature
[ghc-hetmet.git] / compiler / prelude / PrelNames.lhs
index 57de3b0..21dd848 100644 (file)
@@ -6,33 +6,33 @@
 
 Nota Bene: all Names defined in here should come from the base package
 
-* ModuleNames for prelude modules, 
+ - ModuleNames for prelude modules, 
        e.g.    pREL_BASE_Name :: ModuleName
 
-* Modules for prelude modules
+ - Modules for prelude modules
        e.g.    pREL_Base :: Module
 
-* Uniques for Ids, DataCons, TyCons and Classes that the compiler 
-  "knows about" in some way
+ - Uniques for Ids, DataCons, TyCons and Classes that the compiler 
+   "knows about" in some way
        e.g.    intTyConKey :: Unique
                minusClassOpKey :: Unique
 
-* Names for Ids, DataCons, TyCons and Classes that the compiler 
-  "knows about" in some way
+ - Names for Ids, DataCons, TyCons and Classes that the compiler 
+   "knows about" in some way
        e.g.    intTyConName :: Name
                minusName    :: Name
-  One of these Names contains
+   One of these Names contains
        (a) the module and occurrence name of the thing
        (b) its Unique
-  The may way the compiler "knows about" one of these things is
-  where the type checker or desugarer needs to look it up. For
-  example, when desugaring list comprehensions the desugarer
-  needs to conjure up 'foldr'.  It does this by looking up
-  foldrName in the environment.
+   The may way the compiler "knows about" one of these things is
+   where the type checker or desugarer needs to look it up. For
+   example, when desugaring list comprehensions the desugarer
+   needs to conjure up 'foldr'.  It does this by looking up
+   foldrName in the environment.
 
-* RdrNames for Ids, DataCons etc that the compiler may emit into
-  generated code (e.g. for deriving).  It's not necessary to know
-  the uniques for these guys, only their names
+ - RdrNames for Ids, DataCons etc that the compiler may emit into
+   generated code (e.g. for deriving).  It's not necessary to know
+   the uniques for these guys, only their names
 
 
 \begin{code}
@@ -182,7 +182,7 @@ basicKnownKeyNames
         -- Parallel array operations
        nullPName, lengthPName, replicatePName, singletonPName, mapPName,
        filterPName, zipPName, crossMapPName, indexPName,
-       toPName, bpermutePName, bpermuteDftPName, indexOfPName,
+       toPName, emptyPName, appPName,
 
        -- FFI primitive types that are not wired-in.
        stablePtrTyConName, ptrTyConName, funPtrTyConName,
@@ -203,6 +203,9 @@ basicKnownKeyNames
        -- Other classes
        randomClassName, randomGenClassName, monadPlusClassName,
 
+        -- Annotation type checking
+        toAnnotationWrapperName,
+
        -- Booleans
        andName, orName
        
@@ -231,27 +234,31 @@ genericTyConNames = [crossTyConName, plusTyConName, genUnitTyConName]
 pRELUDE :: Module
 pRELUDE                = mkBaseModule_ pRELUDE_NAME
 
-gHC_PRIM, gHC_BOOL, gHC_UNIT, gHC_ORDERING, gHC_GENERICS, gHC_BASE, gHC_ENUM,
-    gHC_SHOW, gHC_READ, gHC_NUM, gHC_INTEGER, gHC_LIST, gHC_PARR,
-    dATA_TUP, dATA_EITHER, dATA_STRING, gHC_PACK, gHC_CONC, gHC_IO_BASE,
+gHC_PRIM, gHC_TYPES, gHC_BOOL, gHC_UNIT, gHC_ORDERING, gHC_GENERICS, gHC_CLASSES, gHC_BASE, gHC_ENUM,
+    gHC_SHOW, gHC_READ, gHC_NUM, gHC_INTEGER, gHC_INTEGER_INTERNALS, gHC_LIST, gHC_PARR,
+    gHC_TUPLE, dATA_TUPLE, dATA_EITHER, dATA_STRING, gHC_PACK, gHC_CONC, gHC_IO_BASE,
     gHC_ST, gHC_ARR, gHC_STABLE, gHC_ADDR, gHC_PTR, gHC_ERR, gHC_REAL,
     gHC_FLOAT, gHC_TOP_HANDLER, sYSTEM_IO, dYNAMIC, tYPEABLE, gENERICS,
     dOTNET, rEAD_PREC, lEX, gHC_INT, gHC_WORD, mONAD, mONAD_FIX, aRROW,
-    gHC_DESUGAR, rANDOM, gHC_EXTS :: Module
+    gHC_DESUGAR, rANDOM, gHC_EXTS, cONTROL_EXCEPTION_BASE :: Module
 gHC_PRIM       = mkPrimModule (fsLit "GHC.Prim")   -- Primitive types and values
+gHC_TYPES   = mkPrimModule (fsLit "GHC.Types")
 gHC_UNIT       = mkPrimModule (fsLit "GHC.Unit")
 gHC_BOOL       = mkPrimModule (fsLit "GHC.Bool")
 gHC_ORDERING   = mkPrimModule (fsLit "GHC.Ordering")
 gHC_GENERICS   = mkPrimModule (fsLit "GHC.Generics")
+gHC_CLASSES    = mkBaseModule (fsLit "GHC.Classes")
 gHC_BASE       = mkBaseModule (fsLit "GHC.Base")
 gHC_ENUM       = mkBaseModule (fsLit "GHC.Enum")
 gHC_SHOW       = mkBaseModule (fsLit "GHC.Show")
 gHC_READ       = mkBaseModule (fsLit "GHC.Read")
 gHC_NUM                = mkBaseModule (fsLit "GHC.Num")
 gHC_INTEGER    = mkIntegerModule (fsLit "GHC.Integer")
+gHC_INTEGER_INTERNALS = mkIntegerModule (fsLit "GHC.Integer.Internals")
 gHC_LIST       = mkBaseModule (fsLit "GHC.List")
 gHC_PARR       = mkBaseModule (fsLit "GHC.PArr")
-dATA_TUP       = mkBaseModule (fsLit "Data.Tuple")
+gHC_TUPLE      = mkPrimModule (fsLit "GHC.Tuple")
+dATA_TUPLE     = mkBaseModule (fsLit "Data.Tuple")
 dATA_EITHER    = mkBaseModule (fsLit "Data.Either")
 dATA_STRING    = mkBaseModule (fsLit "Data.String")
 gHC_PACK       = mkBaseModule (fsLit "GHC.Pack")
@@ -269,7 +276,7 @@ gHC_TOP_HANDLER     = mkBaseModule (fsLit "GHC.TopHandler")
 sYSTEM_IO      = mkBaseModule (fsLit "System.IO")
 dYNAMIC                = mkBaseModule (fsLit "Data.Dynamic")
 tYPEABLE       = mkBaseModule (fsLit "Data.Typeable")
-gENERICS       = mkBaseModule (fsLit "Data.Generics.Basics")
+gENERICS        = mkBaseModule (fsLit "Data.Data")
 dOTNET         = mkBaseModule (fsLit "GHC.Dotnet")
 rEAD_PREC      = mkBaseModule (fsLit "Text.ParserCombinators.ReadPrec")
 lEX                = mkBaseModule (fsLit "Text.Read.Lex")
@@ -281,6 +288,7 @@ aRROW               = mkBaseModule (fsLit "Control.Arrow")
 gHC_DESUGAR = mkBaseModule (fsLit "GHC.Desugar")
 rANDOM         = mkBaseModule (fsLit "System.Random")
 gHC_EXTS       = mkBaseModule (fsLit "GHC.Exts")
+cONTROL_EXCEPTION_BASE = mkBaseModule (fsLit "Control.Exception.Base")
 
 mAIN, rOOT_MAIN :: Module
 mAIN           = mkMainModule_ mAIN_NAME
@@ -290,9 +298,8 @@ rOOT_MAIN   = mkMainModule (fsLit ":Main") -- Root module for initialisation
        -- use himself.  The z-encoding for ':' is "ZC", so the z-encoded
        -- module name still starts with a capital letter, which keeps
        -- the z-encoded version consistent.
-iNTERACTIVE, thFAKE :: Module
+iNTERACTIVE :: Module
 iNTERACTIVE    = mkMainModule (fsLit ":Interactive")
-thFAKE         = mkMainModule (fsLit ":THFake")
 
 pRELUDE_NAME, mAIN_NAME :: ModuleName
 pRELUDE_NAME   = mkModuleNameFS (fsLit "Prelude")
@@ -310,6 +317,9 @@ mkBaseModule m = mkModule basePackageId (mkModuleNameFS m)
 mkBaseModule_ :: ModuleName -> Module
 mkBaseModule_ m = mkModule basePackageId m
 
+mkSybModule :: FastString -> Module
+mkSybModule m = mkModule sybPackageId (mkModuleNameFS m)
+
 mkMainModule :: FastString -> Module
 mkMainModule m = mkModule mainPackageId (mkModuleNameFS m)
 
@@ -326,7 +336,7 @@ mkMainModule_ m = mkModule mainPackageId m
 \begin{code}
 mkTupleModule :: Boxity -> Arity -> Module
 mkTupleModule Boxed   0 = gHC_UNIT
-mkTupleModule Boxed   _ = dATA_TUP
+mkTupleModule Boxed   _ = gHC_TUPLE
 mkTupleModule Unboxed _ = gHC_PRIM
 \end{code}
 
@@ -351,11 +361,11 @@ eq_RDR, ge_RDR, ne_RDR, le_RDR, lt_RDR, gt_RDR, compare_RDR,
     ltTag_RDR, eqTag_RDR, gtTag_RDR :: RdrName
 eq_RDR                         = nameRdrName eqName
 ge_RDR                         = nameRdrName geName
-ne_RDR                         = varQual_RDR  gHC_BASE (fsLit "/=")
-le_RDR                         = varQual_RDR  gHC_BASE (fsLit "<=") 
-lt_RDR                         = varQual_RDR  gHC_BASE (fsLit "<") 
-gt_RDR                         = varQual_RDR  gHC_BASE (fsLit ">")  
-compare_RDR            = varQual_RDR  gHC_BASE (fsLit "compare") 
+ne_RDR                         = varQual_RDR  gHC_CLASSES (fsLit "/=")
+le_RDR                         = varQual_RDR  gHC_CLASSES (fsLit "<=") 
+lt_RDR                         = varQual_RDR  gHC_CLASSES (fsLit "<") 
+gt_RDR                         = varQual_RDR  gHC_CLASSES (fsLit ">")  
+compare_RDR            = varQual_RDR  gHC_CLASSES (fsLit "compare") 
 ltTag_RDR              = dataQual_RDR gHC_ORDERING (fsLit "LT") 
 eqTag_RDR              = dataQual_RDR gHC_ORDERING (fsLit "EQ")
 gtTag_RDR              = dataQual_RDR gHC_ORDERING (fsLit "GT")
@@ -435,7 +445,7 @@ compose_RDR         = varQual_RDR gHC_BASE (fsLit ".")
 not_RDR, getTag_RDR, succ_RDR, pred_RDR, minBound_RDR, maxBound_RDR,
     range_RDR, inRange_RDR, index_RDR,
     unsafeIndex_RDR, unsafeRangeSize_RDR :: RdrName
-not_RDR                = varQual_RDR gHC_BASE (fsLit "not")
+not_RDR                = varQual_RDR gHC_CLASSES (fsLit "not")
 getTag_RDR             = varQual_RDR gHC_BASE (fsLit "getTag")
 succ_RDR               = varQual_RDR gHC_ENUM (fsLit "succ")
 pred_RDR                = varQual_RDR gHC_ENUM (fsLit "pred")
@@ -549,10 +559,10 @@ inlineIdName              = varQual gHC_BASE (fsLit "inline") inlineIdKey
 
 -- Base classes (Eq, Ord, Functor)
 eqClassName, eqName, ordClassName, geName, functorClassName :: Name
-eqClassName      = clsQual  gHC_BASE (fsLit "Eq")      eqClassKey
-eqName           = methName gHC_BASE (fsLit "==")      eqClassOpKey
-ordClassName     = clsQual  gHC_BASE (fsLit "Ord")     ordClassKey
-geName           = methName gHC_BASE (fsLit ">=")      geClassOpKey
+eqClassName      = clsQual  gHC_CLASSES (fsLit "Eq")      eqClassKey
+eqName           = methName gHC_CLASSES (fsLit "==")      eqClassOpKey
+ordClassName     = clsQual  gHC_CLASSES (fsLit "Ord")     ordClassKey
+geName           = methName gHC_CLASSES (fsLit ">=")      geClassOpKey
 functorClassName  = clsQual  gHC_BASE (fsLit "Functor") functorClassKey
 
 -- Class Monad
@@ -579,8 +589,8 @@ buildName     = varQual gHC_BASE (fsLit "build")      buildIdKey
 augmentName      = varQual gHC_BASE (fsLit "augment")    augmentIdKey
 mapName       = varQual gHC_BASE (fsLit "map")        mapIdKey
 appendName       = varQual gHC_BASE (fsLit "++")         appendIdKey
-andName                  = varQual gHC_BASE (fsLit "&&")        andIdKey
-orName           = varQual gHC_BASE (fsLit "||")        orIdKey
+andName                  = varQual gHC_CLASSES (fsLit "&&")     andIdKey
+orName           = varQual gHC_CLASSES (fsLit "||")     orIdKey
 assertName        = varQual gHC_BASE (fsLit "assert")     assertIdKey
 breakpointName    = varQual gHC_BASE (fsLit "breakpoint") breakpointIdKey
 breakpointCondName= varQual gHC_BASE (fsLit "breakpointCond") breakpointCondIdKey
@@ -608,8 +618,8 @@ breakpointAutoJumpName
 
 -- PrelTup
 fstName, sndName :: Name
-fstName                  = varQual dATA_TUP (fsLit "fst") fstIdKey
-sndName                  = varQual dATA_TUP (fsLit "snd") sndIdKey
+fstName                  = varQual dATA_TUPLE (fsLit "fst") fstIdKey
+sndName                  = varQual dATA_TUPLE (fsLit "snd") sndIdKey
 
 -- Module PrelNum
 numClassName, fromIntegerName, minusName, negateName, plusIntegerName,
@@ -620,7 +630,7 @@ minusName     = methName gHC_NUM (fsLit "-") minusClassOpKey
 negateName       = methName gHC_NUM (fsLit "negate") negateClassOpKey
 plusIntegerName   = varQual  gHC_INTEGER (fsLit "plusInteger") plusIntegerIdKey
 timesIntegerName  = varQual  gHC_INTEGER (fsLit "timesInteger") timesIntegerIdKey
-integerTyConName  = tcQual   gHC_INTEGER (fsLit "Integer") integerTyConKey
+integerTyConName  = tcQual   gHC_INTEGER_INTERNALS (fsLit "Integer") integerTyConKey
 smallIntegerName = varQual gHC_INTEGER (fsLit "smallInteger") smallIntegerIdKey
 
 -- PrelReal types and classes
@@ -669,7 +679,7 @@ dataClassName = clsQual gENERICS (fsLit "Data") dataClassKey
 
 -- Error module
 assertErrorName    :: Name
-assertErrorName          = varQual gHC_ERR (fsLit "assertError") assertErrorIdKey
+assertErrorName          = varQual gHC_IO_BASE (fsLit "assertError") assertErrorIdKey
 
 -- Enum module (Enum, Bounded)
 enumClassName, enumFromName, enumFromToName, enumFromThenName,
@@ -698,8 +708,8 @@ readClassName          = clsQual gHC_READ (fsLit "Read") readClassKey
 -- parallel array types and functions
 enumFromToPName, enumFromThenToPName, nullPName, lengthPName,
     singletonPName, replicatePName, mapPName, filterPName,
-    zipPName, crossMapPName, indexPName, toPName, bpermutePName,
-    bpermuteDftPName, indexOfPName :: Name
+    zipPName, crossMapPName, indexPName, toPName,
+    emptyPName, appPName :: Name
 enumFromToPName           = varQual gHC_PARR (fsLit "enumFromToP") enumFromToPIdKey
 enumFromThenToPName= varQual gHC_PARR (fsLit "enumFromThenToP") enumFromThenToPIdKey
 nullPName        = varQual gHC_PARR (fsLit "nullP")             nullPIdKey
@@ -712,9 +722,8 @@ zipPName      = varQual gHC_PARR (fsLit "zipP")              zipPIdKey
 crossMapPName    = varQual gHC_PARR (fsLit "crossMapP")         crossMapPIdKey
 indexPName       = varQual gHC_PARR (fsLit "!:")                indexPIdKey
 toPName                  = varQual gHC_PARR (fsLit "toP")               toPIdKey
-bpermutePName     = varQual gHC_PARR (fsLit "bpermuteP")    bpermutePIdKey
-bpermuteDftPName  = varQual gHC_PARR (fsLit "bpermuteDftP") bpermuteDftPIdKey
-indexOfPName      = varQual gHC_PARR (fsLit "indexOfP")     indexOfPIdKey
+emptyPName        = varQual gHC_PARR (fsLit "emptyP")            emptyPIdKey
+appPName          = varQual gHC_PARR (fsLit "+:+")               appPIdKey
 
 -- IOBase things
 ioTyConName, ioDataConName, thenIOName, bindIOName, returnIOName,
@@ -775,6 +784,10 @@ appAName      = varQual aRROW (fsLit "app")          appAIdKey
 choiceAName       = varQual aRROW (fsLit "|||")          choiceAIdKey
 loopAName         = varQual aRROW (fsLit "loop")  loopAIdKey
 
+-- Annotation type checking
+toAnnotationWrapperName :: Name
+toAnnotationWrapperName = varQual gHC_DESUGAR (fsLit "toAnnotationWrapper") toAnnotationWrapperIdKey
+
 -- Other classes, needed for type defaulting
 monadPlusClassName, randomClassName, randomGenClassName,
     isStringClassName :: Name
@@ -1170,8 +1183,7 @@ groupWithIdKey        = mkPreludeMiscIdUnique 70
 -- Parallel array functions
 singletonPIdKey, nullPIdKey, lengthPIdKey, replicatePIdKey, mapPIdKey,
     filterPIdKey, zipPIdKey, crossMapPIdKey, indexPIdKey, toPIdKey,
-    enumFromToPIdKey, enumFromThenToPIdKey,
-    bpermutePIdKey, bpermuteDftPIdKey, indexOfPIdKey :: Unique
+    enumFromToPIdKey, enumFromThenToPIdKey, emptyPIdKey, appPIdKey :: Unique
 singletonPIdKey               = mkPreludeMiscIdUnique 79
 nullPIdKey                   = mkPreludeMiscIdUnique 80
 lengthPIdKey                 = mkPreludeMiscIdUnique 81
@@ -1184,9 +1196,8 @@ indexPIdKey                     = mkPreludeMiscIdUnique 87
 toPIdKey                     = mkPreludeMiscIdUnique 88
 enumFromToPIdKey              = mkPreludeMiscIdUnique 89
 enumFromThenToPIdKey          = mkPreludeMiscIdUnique 90
-bpermutePIdKey               = mkPreludeMiscIdUnique 91
-bpermuteDftPIdKey            = mkPreludeMiscIdUnique 92
-indexOfPIdKey                = mkPreludeMiscIdUnique 93
+emptyPIdKey                   = mkPreludeMiscIdUnique 91
+appPIdKey                     = mkPreludeMiscIdUnique 92
 
 -- dotnet interop
 unmarshalObjectIdKey, marshalObjectIdKey, marshalStringIdKey,
@@ -1245,6 +1256,10 @@ loopAIdKey       = mkPreludeMiscIdUnique 124
 fromStringClassOpKey :: Unique
 fromStringClassOpKey         = mkPreludeMiscIdUnique 125
 
+-- Annotation type checking
+toAnnotationWrapperIdKey :: Unique
+toAnnotationWrapperIdKey      = mkPreludeMiscIdUnique 126
+
 ---------------- Template Haskell -------------------
 --     USES IdUniques 200-399
 -----------------------------------------------------