; decls = [ tyThingToIfaceDecl ext_nm_rhs thing
| thing <- typeEnvElts type_env,
- not (isImplicitName (getName thing)) ]
+ let name = getName thing,
+ not (isImplicitName name || isWiredInName name) ]
-- Don't put implicit Ids and class tycons in the interface file
+ -- Nor wired-in things; the compiler knows about them anyhow
; fixities = [(occ,fix) | FixItem occ fix _ <- nameEnvElts fix_env]
; deprecs = mkIfaceDeprec src_deprecs
%* *
%************************************************************************
-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]