[project @ 2003-08-01 14:58:47 by panne]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelInfo.lhs
index e97d288..256b03c 100644 (file)
@@ -8,17 +8,11 @@ module PrelInfo (
        module PrelNames,
        module MkId,
 
-       wiredInThings,  -- Names of wired in things
        wiredInThingEnv,
        ghcPrimExports,
-       cCallableClassDecl, cReturnableClassDecl, assertDecl,
+       cCallableClassDecl, cReturnableClassDecl,
+       knownKeyNames,
        
-       -- Primop RdrNames
-       eqH_Char_RDR,   ltH_Char_RDR,   eqH_Word_RDR,  ltH_Word_RDR, 
-       eqH_Addr_RDR,   ltH_Addr_RDR,   eqH_Float_RDR, ltH_Float_RDR, 
-       eqH_Double_RDR, ltH_Double_RDR, eqH_Int_RDR,   ltH_Int_RDR,
-       geH_RDR, leH_RDR, minusH_RDR, tagToEnumH_RDR, 
-
        -- Random other things
        maybeCharLikeCon, maybeIntLikeCon,
 
@@ -30,23 +24,31 @@ module PrelInfo (
 
 #include "HsVersions.h"
 
-import PrelNames       -- Prelude module names
-
-import PrimOp          ( PrimOp(..), allThePrimOps, primOpRdrName, primOpOcc )
+import PrelNames       ( basicKnownKeyNames, 
+                         cCallableClassName, cReturnableClassName,
+                         hasKey, charDataConKey, intDataConKey,
+                         numericClassKeys, standardClassKeys, cCallishClassKeys,
+                         noDictClassKeys )
+#ifdef GHCI
+import DsMeta          ( templateHaskellNames )
+import NameSet         ( nameSetToList )
+#endif
+
+import PrimOp          ( allThePrimOps, primOpOcc )
 import DataCon         ( DataCon )
 import Id              ( idName )
 import MkId            ( mkPrimOpId, wiredInIds )
 import MkId            -- All of it, for re-export
-import Name            ( nameOccName, nameRdrName )
-import RdrName         ( mkRdrUnqual )
-import HsSyn           ( HsTyVarBndr(..), TyClDecl(..), HsType(..) )
+import Name            ( Name, nameOccName, NamedThing(..) )
+import RdrName         ( mkRdrUnqual, getRdrName )
+import HsSyn           ( HsTyVarBndr(..) )
 import OccName         ( mkVarOcc )
 import TysPrim         ( primTyCons )
 import TysWiredIn      ( wiredInTyCons )
 import RdrHsSyn                ( mkClassDecl )
-import HscTypes        ( TyThing(..), implicitTyThingIds, TypeEnv, mkTypeEnv,
+import HscTypes        ( TyThing(..), implicitTyThings, TypeEnv, mkTypeEnv,
                          GenAvailInfo(..), RdrAvailInfo )
-import Class           ( Class, classKey )
+import Class           ( Class, classKey, className )
 import Type            ( funTyCon, openTypeKind, liftedTypeKind )
 import TyCon           ( tyConName )
 import SrcLoc          ( noSrcLoc )
@@ -68,7 +70,7 @@ wiredInThings
   = concat
     [          -- Wired in TyCons and their implicit Ids
          tycon_things
-       , map AnId (implicitTyThingIds tycon_things)
+       , implicitTyThings tycon_things
 
                -- Wired in Ids
        , map AnId wiredInIds
@@ -81,6 +83,14 @@ wiredInThings
 
 wiredInThingEnv :: TypeEnv
 wiredInThingEnv = mkTypeEnv wiredInThings
+
+knownKeyNames :: [Name]
+knownKeyNames 
+  = map getName wiredInThings 
+    ++ basicKnownKeyNames
+#ifdef GHCI
+    ++ nameSetToList templateHaskellNames
+#endif
 \end{code}
 
 We let a lot of "non-standard" values be visible, so that we can make
@@ -100,7 +110,6 @@ wired-in Ids, and the CCallable & CReturnable classes.
 ghcPrimExports :: [RdrAvailInfo]
  = AvailTC cCallableOcc [ cCallableOcc ] :
    AvailTC cReturnableOcc [ cReturnableOcc ] :
-   Avail (nameOccName assertName) :    -- doesn't have an Id
    map (Avail . nameOccName . idName) ghcPrimIds ++
    map (Avail . primOpOcc) allThePrimOps ++
    [ AvailTC occ [occ] |
@@ -110,17 +119,9 @@ ghcPrimExports :: [RdrAvailInfo]
    cCallableOcc = nameOccName cCallableClassName
    cReturnableOcc = nameOccName cReturnableClassName
 
-assertDecl
-  = IfaceSig { 
-       tcdName = nameRdrName assertName,
-       tcdType = HsForAllTy (Just [liftedAlpha]) [] (HsTyVar alpha),
-       tcdIdInfo = [],
-       tcdLoc = noSrcLoc
-    }
-
 cCallableClassDecl
   = mkClassDecl
-    ([], nameRdrName cCallableClassName, [openAlpha])
+    ([], getRdrName cCallableClassName, [openAlpha])
     [] -- no fds
     [] -- no sigs
     Nothing -- no mbinds
@@ -128,7 +129,7 @@ cCallableClassDecl
 
 cReturnableClassDecl
   = mkClassDecl
-    ([], nameRdrName cReturnableClassName, [openAlpha])
+    ([], getRdrName cReturnableClassName, [openAlpha])
     [] -- no fds
     [] -- no sigs
     Nothing -- no mbinds
@@ -139,35 +140,6 @@ openAlpha = IfaceTyVar alpha openTypeKind
 liftedAlpha = IfaceTyVar alpha liftedTypeKind
 \end{code}
 
-%************************************************************************
-%*                                                                     *
-\subsection{RdrNames for the primops}
-%*                                                                     *
-%************************************************************************
-
-These can't be in PrelNames, because we get the RdrName from the PrimOp,
-which is above PrelNames in the module hierarchy.
-
-\begin{code}
-eqH_Char_RDR   = primOpRdrName CharEqOp
-ltH_Char_RDR   = primOpRdrName CharLtOp
-eqH_Word_RDR   = primOpRdrName WordEqOp
-ltH_Word_RDR   = primOpRdrName WordLtOp
-eqH_Addr_RDR   = primOpRdrName AddrEqOp
-ltH_Addr_RDR   = primOpRdrName AddrLtOp
-eqH_Float_RDR  = primOpRdrName FloatEqOp
-ltH_Float_RDR  = primOpRdrName FloatLtOp
-eqH_Double_RDR = primOpRdrName DoubleEqOp
-ltH_Double_RDR = primOpRdrName DoubleLtOp
-eqH_Int_RDR    = primOpRdrName IntEqOp
-ltH_Int_RDR    = primOpRdrName IntLtOp
-geH_RDR                = primOpRdrName IntGeOp
-leH_RDR                = primOpRdrName IntLeOp
-minusH_RDR     = primOpRdrName IntSubOp
-
-tagToEnumH_RDR = primOpRdrName TagToEnumOp
-\end{code}
-
 
 %************************************************************************
 %*                                                                     *
@@ -197,7 +169,7 @@ isCcallishClass, isCreturnableClass, isNoDictClass,
 isNumericClass     clas = classKey clas `is_elem` numericClassKeys
 isStandardClass    clas = classKey clas `is_elem` standardClassKeys
 isCcallishClass           clas = classKey clas `is_elem` cCallishClassKeys
-isCreturnableClass clas = classKey clas == cReturnableClassKey
+isCreturnableClass clas = className clas == cReturnableClassName
 isNoDictClass      clas = classKey clas `is_elem` noDictClassKeys
 is_elem = isIn "is_X_Class"
 \end{code}