\begin{code}
module PrelInfo (
- module MkId,
+ wiredInIds, ghcPrimIds,
+ primOpRules, builtinRules,
- ghcPrimExports,
- wiredInThings, basicKnownKeyNames,
- primOpId,
-
- -- Random other things
- maybeCharLikeCon, maybeIntLikeCon,
+ ghcPrimExports,
+ wiredInThings, basicKnownKeyNames,
+ primOpId,
+
+ -- Random other things
+ maybeCharLikeCon, maybeIntLikeCon,
- -- Class categories
- isNumericClass, isStandardClass
+ -- Class categories
+ isNumericClass, isStandardClass
) where
#include "HsVersions.h"
-import PrelNames ( basicKnownKeyNames,
- hasKey, charDataConKey, intDataConKey,
- numericClassKeys, standardClassKeys )
-
+import PrelNames ( basicKnownKeyNames,
+ hasKey, charDataConKey, intDataConKey,
+ numericClassKeys, standardClassKeys )
+import PrelRules
import PrimOp ( PrimOp, allThePrimOps, primOpOcc, primOpTag, maxPrimOpTag )
import DataCon ( DataCon )
import Id ( Id, idName )
-import MkId ( mkPrimOpId, wiredInIds )
import MkId -- All of it, for re-export
import Name ( nameOccName )
import TysPrim ( primTyCons )
import TyCon ( tyConName )
import Util ( isIn )
-import Array ( Array, array, (!) )
+import Data.Array
\end{code}
%************************************************************************
%* *
%************************************************************************
-We have two ``builtin name funs,'' one to look up @TyCons@ and
-@Classes@, the other to look up values.
+Notes about wired in things
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* Wired-in things are Ids\/TyCons that are completely known to the compiler.
+ They are global values in GHC, (e.g. listTyCon :: TyCon).
+
+* A wired in Name contains the thing itself inside the Name:
+ see Name.wiredInNameTyThing_maybe
+ (E.g. listTyConName contains listTyCon.
+
+* The name cache is initialised with (the names of) all wired-in things
+
+* The type checker sees if the Name is wired in before looking up
+ the name in the type environment. So the type envt itself contains
+ no wired in things.
+
+* MkIface prunes out wired-in things before putting them in an interface file.
+ So interface files never contain wired-in things.
+
\begin{code}
wiredInThings :: [TyThing]
+-- This list is used only to initialise HscMain.knownKeyNames
+-- to ensure that when you say "Prelude.map" in your source code, you
+-- get a Name with the correct known key
wiredInThings
= concat
[ -- Wired in TyCons and their implicit Ids
isNumericClass clas = classKey clas `is_elem` numericClassKeys
isStandardClass clas = classKey clas `is_elem` standardClassKeys
+
+is_elem :: Eq a => a -> [a] -> Bool
is_elem = isIn "is_X_Class"
\end{code}