From e598b8f91d1886cd6cab2e07efa6749fe4035614 Mon Sep 17 00:00:00 2001 From: "simonpj@microsoft.com" Date: Wed, 27 May 2009 17:56:03 +0000 Subject: [PATCH] Comments about wiredInIds --- compiler/basicTypes/MkId.lhs | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/compiler/basicTypes/MkId.lhs b/compiler/basicTypes/MkId.lhs index 986542b..b28b985 100644 --- a/compiler/basicTypes/MkId.lhs +++ b/compiler/basicTypes/MkId.lhs @@ -86,17 +86,42 @@ import Module %* * %************************************************************************ +Note [Wired-in Ids] +~~~~~~~~~~~~~~~~~~~ +There are several reasons why an Id might appear in the wiredInIds: + +(1) The ghcPrimIds are wired in because they can't be defined in + Haskell at all, although the can be defined in Core. They have + compulsory unfoldings, so they are always inlined and they have + no definition site. Their home module is GHC.Prim, so they + also have a description in primops.txt.pp, where they are called + 'pseudoops'. + +(2) The 'error' function, eRROR_ID, is wired in because we don't yet have + a way to express in an interface file that the result type variable + is 'open'; that is can be unified with an unboxed type + + [The interface file format now carry such information, but there's + no way yet of expressing at the definition site for these + error-reporting functions that they have an 'open' + result type. -- sof 1/99] + +(3) Other error functions (rUNTIME_ERROR_ID) are wired in (a) because + the desugarer generates code that mentiones them directly, and + (b) for the same reason as eRROR_ID + +(4) lazyId is wired in because the wired-in version overrides the + strictness of the version defined in GHC.Base + +In cases (2-4), the function has a definition in a library module, and +can be called; but the wired-in version means that the details are +never read from that module's interface file; instead, the full definition +is right here. + \begin{code} wiredInIds :: [Id] wiredInIds - = [ -- These error-y things are wired in because we don't yet have - -- a way to express in an interface file that the result type variable - -- is 'open'; that is can be unified with an unboxed type - -- - -- [The interface file format now carry such information, but there's - -- no way yet of expressing at the definition site for these - -- error-reporting functions that they have an 'open' - -- result type. -- sof 1/99] + = [ eRROR_ID, -- This one isn't used anywhere else in the compiler -- But we still need it in wiredInIds so that when GHC -- 1.7.10.4