Comments about wiredInIds
authorsimonpj@microsoft.com <unknown>
Wed, 27 May 2009 17:56:03 +0000 (17:56 +0000)
committersimonpj@microsoft.com <unknown>
Wed, 27 May 2009 17:56:03 +0000 (17:56 +0000)
compiler/basicTypes/MkId.lhs

index 986542b..b28b985 100644 (file)
@@ -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