Commit e598b8f9 authored by simonpj@microsoft.com's avatar simonpj@microsoft.com
Browse files

Comments about wiredInIds

parent 110b54f7
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment