[project @ 2002-07-11 06:52:23 by ken]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelNames.lhs
index 883ce56..b371077 100644 (file)
@@ -49,11 +49,12 @@ import Unique         ( Unique, Uniquable(..), hasKey,
                  ) 
 import BasicTypes ( Boxity(..), Arity )
 import UniqFM    ( UniqFM, listToUFM )
-import Name      ( Name, mkLocalName, mkKnownKeyGlobal, nameRdrName )
+import Name      ( Name, mkInternalName, mkKnownKeyExternalName, nameRdrName )
 import RdrName    ( rdrNameOcc )
 import SrcLoc     ( builtinSrcLoc, noSrcLoc )
 import Util      ( nOfThem )
 import Panic     ( panic )
+import FastString
 \end{code}
 
 
@@ -66,14 +67,14 @@ import Panic          ( panic )
 This *local* name is used by the interactive stuff
 
 \begin{code}
-itName uniq = mkLocalName uniq (mkOccFS varName FSLIT("it")) noSrcLoc
+itName uniq = mkInternalName uniq (mkOccFS varName FSLIT("it")) noSrcLoc
 \end{code}
 
 \begin{code}
 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
 -- during compiler debugging.
 mkUnboundName :: RdrName -> Name
-mkUnboundName rdr_name = mkLocalName unboundKey (rdrNameOcc rdr_name) builtinSrcLoc
+mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) builtinSrcLoc
 
 isUnboundName :: Name -> Bool
 isUnboundName name = name `hasKey` unboundKey
@@ -96,7 +97,7 @@ knownKeyNames
  =  [
        -- Type constructors (synonyms especially)
        ioTyConName, ioDataConName,
-       runMainName,
+       runIOName,
        orderingTyConName,
        rationalTyConName,
        ratioDataConName,
@@ -144,6 +145,7 @@ knownKeyNames
        toEnumName,
        eqName,
        thenMName,
+       bindMName,
        returnMName,
        failMName,
        fromRationalName,
@@ -155,6 +157,7 @@ knownKeyNames
        deRefStablePtrName,
        newStablePtrName,
        bindIOName,
+       thenIOName,
        returnIOName,
        failIOName,
 
@@ -225,7 +228,6 @@ knownKeyNames
 \begin{code}
 pRELUDE_Name      = mkModuleName "Prelude"
 gHC_PRIM_Name     = mkModuleName "GHC.Prim"       -- Primitive types and values
-gHC_BUILTIN_Name  = mkModuleName "GHC.Builtin"
 pREL_BASE_Name    = mkModuleName "GHC.Base"
 pREL_ENUM_Name    = mkModuleName "GHC.Enum"
 pREL_SHOW_Name    = mkModuleName "GHC.Show"
@@ -242,7 +244,6 @@ pREL_ARR_Name     = mkModuleName "GHC.Arr"
 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
 fOREIGN_PTR_Name  = mkModuleName "Foreign.ForeignPtr"
 pREL_STABLE_Name  = mkModuleName "GHC.Stable"
-pREL_SPLIT_Name   = mkModuleName "GHC.Split"
 pREL_ADDR_Name    = mkModuleName "GHC.Addr"
 pREL_PTR_Name     = mkModuleName "GHC.Ptr"
 pREL_ERR_Name     = mkModuleName "GHC.Err"
@@ -251,6 +252,9 @@ pREL_FLOAT_Name   = mkModuleName "GHC.Float"
 pREL_TOP_HANDLER_Name = mkModuleName "GHC.TopHandler"
 sYSTEM_IO_Name   = mkModuleName "System.IO"
 
+rEAD_PREC_Name = mkModuleName "Text.ParserCombinators.ReadPrec"
+lEX_Name       = mkModuleName "Text.Read.Lex"
+
 mAIN_Name        = mkModuleName "Main"
 pREL_INT_Name    = mkModuleName "GHC.Int"
 pREL_WORD_Name   = mkModuleName "GHC.Word"
@@ -258,10 +262,9 @@ pREL_WORD_Name       = mkModuleName "GHC.Word"
 fOREIGNOBJ_Name          = mkModuleName "ForeignObj"
 aDDR_Name        = mkModuleName "Addr"
 
-gLA_EXTS_Name   = mkModuleName "GlaExts"
+gLA_EXTS_Name   = mkModuleName "GHC.Exts"
 
 gHC_PRIM       = mkPrelModule gHC_PRIM_Name
-gHC_BUILTIN            = mkPrelModule gHC_BUILTIN_Name
 pREL_BASE      = mkPrelModule pREL_BASE_Name
 pREL_ADDR      = mkPrelModule pREL_ADDR_Name
 pREL_PTR       = mkPrelModule pREL_PTR_Name
@@ -288,17 +291,17 @@ mkTupNameStr :: Boxity -> Int -> (ModuleName, UserFS)
 
 mkTupNameStr Boxed 0 = (pREL_BASE_Name, FSLIT("()"))
 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
-mkTupNameStr Boxed 2 = (pREL_TUP_Name, _PK_ "(,)")   -- not strictly necessary
-mkTupNameStr Boxed 3 = (pREL_TUP_Name, _PK_ "(,,)")  -- ditto
-mkTupNameStr Boxed 4 = (pREL_TUP_Name, _PK_ "(,,,)") -- ditto
-mkTupNameStr Boxed n = (pREL_TUP_Name, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
+mkTupNameStr Boxed 2 = (pREL_TUP_Name, mkFastString "(,)")   -- not strictly necessary
+mkTupNameStr Boxed 3 = (pREL_TUP_Name, mkFastString "(,,)")  -- ditto
+mkTupNameStr Boxed 4 = (pREL_TUP_Name, mkFastString "(,,,)") -- ditto
+mkTupNameStr Boxed n = (pREL_TUP_Name, mkFastString ("(" ++ nOfThem (n-1) ',' ++ ")"))
 
 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
-mkTupNameStr Unboxed 1 = (gHC_PRIM_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
-mkTupNameStr Unboxed 2 = (gHC_PRIM_Name, _PK_ "(#,#)")
-mkTupNameStr Unboxed 3 = (gHC_PRIM_Name, _PK_ "(#,,#)")
-mkTupNameStr Unboxed 4 = (gHC_PRIM_Name, _PK_ "(#,,,#)")
-mkTupNameStr Unboxed n = (gHC_PRIM_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
+mkTupNameStr Unboxed 1 = (gHC_PRIM_Name, mkFastString "(# #)") -- 1 and 0 both make sense!!!
+mkTupNameStr Unboxed 2 = (gHC_PRIM_Name, mkFastString "(#,#)")
+mkTupNameStr Unboxed 3 = (gHC_PRIM_Name, mkFastString "(#,,#)")
+mkTupNameStr Unboxed 4 = (gHC_PRIM_Name, mkFastString "(#,,,#)")
+mkTupNameStr Unboxed n = (gHC_PRIM_Name, mkFastString ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
 
 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName 
 mkTupConRdrName space boxity arity   = case mkTupNameStr boxity arity of
@@ -333,9 +336,9 @@ and it's convenient to write them all down in one place.
 
 \begin{code}
 dollarMainName = varQual mAIN_Name FSLIT("$main") dollarMainKey
-runMainName    = varQual pREL_TOP_HANDLER_Name FSLIT("runMain") runMainKey
+runIOName      = varQual pREL_TOP_HANDLER_Name FSLIT("runIO") runMainKey
 
--- Stuff from PrelGHC
+-- Stuff from GHC.Prim
 usOnceTyConName  = kindQual FSLIT(".") usOnceTyConKey
 usManyTyConName  = kindQual FSLIT("!") usManyTyConKey
 superKindName    = kindQual FSLIT("KX") kindConKey
@@ -371,8 +374,8 @@ foreignObjPrimTyConName       = tcQual  gHC_PRIM_Name FSLIT("ForeignObj#") forei
 bcoPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("BCO#") bcoPrimTyConKey 
 weakPrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Weak#") weakPrimTyConKey 
 threadIdPrimTyConName                = tcQual  gHC_PRIM_Name FSLIT("ThreadId#") threadIdPrimTyConKey 
-cCallableClassName           = clsQual gHC_BUILTIN_Name FSLIT("CCallable") cCallableClassKey
-cReturnableClassName         = clsQual gHC_BUILTIN_Name FSLIT("CReturnable") cReturnableClassKey
+cCallableClassName           = clsQual gHC_PRIM_Name FSLIT("CCallable") cCallableClassKey
+cReturnableClassName         = clsQual gHC_PRIM_Name FSLIT("CReturnable") cReturnableClassKey
 
 -- PrelBase data types and constructors
 charTyConName    = tcQual   pREL_BASE_Name FSLIT("Char") charTyConKey
@@ -427,7 +430,8 @@ geName                = varQual  pREL_BASE_Name FSLIT(">=") geClassOpKey
 
 -- Class Monad
 monadClassName    = clsQual pREL_BASE_Name FSLIT("Monad") monadClassKey
-thenMName         = varQual pREL_BASE_Name FSLIT(">>=") thenMClassOpKey
+thenMName         = varQual pREL_BASE_Name FSLIT(">>")  thenMClassOpKey
+bindMName         = varQual pREL_BASE_Name FSLIT(">>=") bindMClassOpKey
 returnMName       = varQual pREL_BASE_Name FSLIT("return") returnMClassOpKey
 failMName         = varQual pREL_BASE_Name FSLIT("fail") failMClassOpKey
 
@@ -513,6 +517,7 @@ indexOfPName      = varQual pREL_PARR_Name FSLIT("indexOfP")   indexOfPIdKey
 -- IOBase things
 ioTyConName      = tcQual   pREL_IO_BASE_Name FSLIT("IO") ioTyConKey
 ioDataConName     = dataQual pREL_IO_BASE_Name FSLIT("IO") ioDataConKey
+thenIOName       = varQual  pREL_IO_BASE_Name FSLIT("thenIO") thenIOIdKey
 bindIOName       = varQual  pREL_IO_BASE_Name FSLIT("bindIO") bindIOIdKey
 returnIOName     = varQual  pREL_IO_BASE_Name FSLIT("returnIO") returnIOIdKey
 failIOName       = varQual  pREL_IO_BASE_Name FSLIT("failIO") failIOIdKey
@@ -557,13 +562,14 @@ stablePtrDataConName  = dataQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrDa
 deRefStablePtrName    = varQual  pREL_STABLE_Name FSLIT("deRefStablePtr") deRefStablePtrIdKey
 newStablePtrName      = varQual  pREL_STABLE_Name FSLIT("newStablePtr") newStablePtrIdKey
 
+assertName         = varQual gHC_PRIM_Name FSLIT("assert") assertIdKey
+getTagName        = varQual gHC_PRIM_Name FSLIT("getTag#") getTagIdKey
+
 errorName         = varQual pREL_ERR_Name FSLIT("error") errorIdKey
-assertName         = varQual gHC_BUILTIN_Name FSLIT("assert") assertIdKey
-getTagName        = varQual gHC_BUILTIN_Name FSLIT("getTag#") getTagIdKey
 runSTRepName      = varQual pREL_ST_Name  FSLIT("runSTRep") runSTRepIdKey
 
 -- The "split" Id for splittable implicit parameters
-splitName          = varQual pREL_SPLIT_Name FSLIT("split") splitIdKey
+splitName          = varQual gLA_EXTS_Name FSLIT("split") splitIdKey
 \end{code}
 
 %************************************************************************
@@ -610,11 +616,29 @@ showsPrec_RDR        = varQual_RDR  pREL_SHOW_Name FSLIT("showsPrec")
 showSpace_RDR     = varQual_RDR  pREL_SHOW_Name FSLIT("showSpace")
 showString_RDR    = varQual_RDR  pREL_SHOW_Name FSLIT("showString")
 showParen_RDR     = varQual_RDR  pREL_SHOW_Name FSLIT("showParen")
+
 readsPrec_RDR     = varQual_RDR  pREL_READ_Name FSLIT("readsPrec")
+readPrec_RDR      = varQual_RDR  pREL_READ_Name FSLIT("readPrec")
+readListPrec_RDR   = varQual_RDR  pREL_READ_Name FSLIT("readListPrec")
 readList_RDR      = varQual_RDR  pREL_READ_Name FSLIT("readList")
-readParen_RDR     = varQual_RDR  pREL_READ_Name FSLIT("readParen")
-lex_RDR                   = varQual_RDR  pREL_READ_Name FSLIT("lex")
-readList___RDR     = varQual_RDR  pREL_READ_Name FSLIT("readList__")
+
+readListDefault_RDR     = varQual_RDR  pREL_READ_Name FSLIT("readListDefault")
+readListPrecDefault_RDR = varQual_RDR  pREL_READ_Name FSLIT("readListPrecDefault")
+parens_RDR             = varQual_RDR  pREL_READ_Name FSLIT("parens")
+choose_RDR             = varQual_RDR  pREL_READ_Name FSLIT("choose")
+lexP_RDR               = varQual_RDR  pREL_READ_Name FSLIT("lexP")
+
+-- Module ReadPrec
+step_RDR          = varQual_RDR  rEAD_PREC_Name FSLIT("step")
+reset_RDR         = varQual_RDR  rEAD_PREC_Name FSLIT("reset")
+alt_RDR                   = varQual_RDR  rEAD_PREC_Name FSLIT("+++")
+prec_RDR          = varQual_RDR  rEAD_PREC_Name FSLIT("prec")
+
+-- Module Lex
+symbol_RDR        = dataQual_RDR  lEX_Name FSLIT("Symbol")
+ident_RDR         = dataQual_RDR  lEX_Name FSLIT("Ident")
+punc_RDR          = dataQual_RDR  lEX_Name FSLIT("Punc")
+
 times_RDR         = varQual_RDR  pREL_NUM_Name FSLIT("*")
 plus_RDR          = varQual_RDR  pREL_NUM_Name FSLIT("+")
 negate_RDR        = varQual_RDR  pREL_NUM_Name FSLIT("negate")
@@ -648,7 +672,7 @@ foldr_RDR           = nameRdrName foldrName
 build_RDR              = nameRdrName buildName
 enumFromTo_RDR                 = nameRdrName enumFromToName
 returnM_RDR            = nameRdrName returnMName
-thenM_RDR              = nameRdrName thenMName
+bindM_RDR              = nameRdrName bindMName
 failM_RDR              = nameRdrName failMName
 false_RDR              = nameRdrName falseDataConName
 true_RDR               = nameRdrName trueDataConName
@@ -691,12 +715,12 @@ minus_RDR         = nameRdrName minusName
 All these are original names; hence mkOrig
 
 \begin{code}
-varQual  mod str uq = mkKnownKeyGlobal (varQual_RDR  mod str) uq
-dataQual mod str uq = mkKnownKeyGlobal (dataQual_RDR mod str) uq
-tcQual   mod str uq = mkKnownKeyGlobal (tcQual_RDR   mod str) uq
-clsQual  mod str uq = mkKnownKeyGlobal (clsQual_RDR  mod str) uq
+varQual  mod str uq = mkKnownKeyExternalName (varQual_RDR  mod str) uq
+dataQual mod str uq = mkKnownKeyExternalName (dataQual_RDR mod str) uq
+tcQual   mod str uq = mkKnownKeyExternalName (tcQual_RDR   mod str) uq
+clsQual  mod str uq = mkKnownKeyExternalName (clsQual_RDR  mod str) uq
 
-kindQual str uq = mkLocalName uq (mkKindOccFS tcName str) builtinSrcLoc
+kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) builtinSrcLoc
        -- Kinds are not z-encoded in interface file, hence mkKindOccFS
        -- And they don't come from any particular module; indeed we always
        -- want to print them unqualified.  Hence the LocalName
@@ -883,7 +907,7 @@ irrefutPatErrorIdKey              = mkPreludeMiscIdUnique 15
 eqStringIdKey                = mkPreludeMiscIdUnique 16
 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 17
 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
-errorCStringIdKey            = mkPreludeMiscIdUnique 19 
+runtimeErrorIdKey            = mkPreludeMiscIdUnique 19 
 parErrorIdKey                = mkPreludeMiscIdUnique 20
 parIdKey                     = mkPreludeMiscIdUnique 21
 patErrorIdKey                = mkPreludeMiscIdUnique 22
@@ -924,6 +948,8 @@ runMainKey                = mkPreludeMiscIdUnique 56
 
 andIdKey                     = mkPreludeMiscIdUnique 57
 orIdKey                              = mkPreludeMiscIdUnique 58
+thenIOIdKey                  = mkPreludeMiscIdUnique 59
+lazyIdKey                    = mkPreludeMiscIdUnique 60
 
 -- Parallel array functions
 nullPIdKey                   = mkPreludeMiscIdUnique 70
@@ -960,7 +986,8 @@ eqClassOpKey                      = mkPreludeMiscIdUnique 109
 geClassOpKey                 = mkPreludeMiscIdUnique 110
 negateClassOpKey             = mkPreludeMiscIdUnique 111
 failMClassOpKey                      = mkPreludeMiscIdUnique 112
-thenMClassOpKey                      = mkPreludeMiscIdUnique 113 -- (>>=)
+bindMClassOpKey                      = mkPreludeMiscIdUnique 113 -- (>>=)
+thenMClassOpKey                      = mkPreludeMiscIdUnique 114 -- (>>)
 fromEnumClassOpKey           = mkPreludeMiscIdUnique 115
 returnMClassOpKey            = mkPreludeMiscIdUnique 117
 toEnumClassOpKey             = mkPreludeMiscIdUnique 119
@@ -1033,25 +1060,25 @@ derivableClassKeys  = map fst deriving_occ_info
 
 deriving_occ_info
   = [ (eqClassKey,     [intTyCon_RDR, and_RDR, not_RDR])
-    , (ordClassKey,    [intTyCon_RDR, compose_RDR, eqTag_RDR])
+    , (ordClassKey,    [intTyCon_RDR, compose_RDR, eqTag_RDR, error_RDR])
                                -- EQ (from Ordering) is needed to force in the constructors
                                -- as well as the type constructor.
-    , (enumClassKey,   [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR]) 
+    , (enumClassKey,   [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, 
+                        error_RDR, showsPrec_RDR, append_RDR]) 
                                -- The last two Enum deps are only used to produce better
                                -- error msgs for derived toEnum methods.
     , (boundedClassKey,        [intTyCon_RDR])
     , (showClassKey,   [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR, 
                         showParen_RDR, showSpace_RDR, showList___RDR])
-    , (readClassKey,   [intTyCon_RDR, numClass_RDR, ordClass_RDR, append_RDR,
-                         foldr_RDR, build_RDR,
-                             -- foldr and build required for list comprehension
-                             -- KSW 2000-06
-                        lex_RDR, readParen_RDR, readList___RDR, thenM_RDR])
-                            -- returnM (and the rest of the Monad class decl) 
-                            -- will be forced in as result of depending
-                            -- on thenM.   -- SOF 1/99
-    , (ixClassKey,     [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR,
-                         foldr_RDR, build_RDR,
+    , (readClassKey,   [intTyCon_RDR, numClass_RDR, ordClass_RDR,
+                        lexP_RDR, readPrec_RDR, 
+                        readListDefault_RDR, readListPrecDefault_RDR,
+                        step_RDR, parens_RDR, reset_RDR, prec_RDR, alt_RDR, choose_RDR,
+                        ident_RDR,     -- Pulls in the entire Lex.Lexeme data type
+                        bindM_RDR      -- Pulls in the entire Monad class decl
+                       ] )
+    , (ixClassKey,     [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR, error_RDR,
+                         foldr_RDR, build_RDR, 
                              -- foldr and build required for list comprehension used
                              -- with single constructor types  -- KSW 2000-06
                         returnM_RDR, failM_RDR])