Where do I put the *definition* of a DFunId?

ÉRDI Gergő gergo at erdi.hu
Fri Feb 11 10:41:04 UTC 2022

On Fri, 11 Feb 2022, Simon Peyton Jones wrote:

> A `ModDetails` gives the type signatures for everything, but no actual code.  For
> example if you have `f :: Int -> Int` in the `md_types`, the `ModDetails` doesn't
> include the binding `f = rhs` for `f`.

Yes, this on its own makes sense.

> Presumably you must also be generating these bindings (in a `ModGuts` perhaps?) and
> generating code for them that will ultimately be linked into the program to run.

I am not generating a `ModGuts`. My intention is to use these instances 
from "normal" (hand-written) source input to GHC. GHC should use the 
`DFunUnfolding`s during specialization to get rid of overloaded code, 
after which I should have inlined-due-to-specialization versions of my 

> Well, put the `DFunId` binding in the same place, alongside `f`.

For the sake of argument, suppose that I did make a `ModGuts`. In that 
case, what kind of internal state would be updated based on the contents 
of that `ModGuts` such that references to my `DFunId` would work?

More information about the ghc-devs mailing list