Skip to content

GHC API: expose separate compilation stages

The GHC API is currently hard to use for certain things: extracting the output from various compilation stages; or "hooking in" to the compilation pipeline. The checkModule function works for some uses, but it doesn't let you extract Core, for example, and it doesn't complete the compilation and inject the result into the Session, so the module still has to be compiled.

One way to solve this would be to abstract the compilation pipeline as a series of functions, so that the user could script the compiler. We haven't worked out the details, but in principle it should be possible to write a GHC API client that invokes the following steps:

  • parse a module
  • rename/typecheck
  • deSugar
  • optimise...
  • generate code

and can then inject the compilation results back into the Session for use by future compilations. Each individual stage should provide a result that can be inspected: get the renamed/typechecked code out, get the Core, and so on.

The current checkModule could be built on top of such an interface, but the interface would allow much more flexibility.

Trac metadata
Trac field Value
Version 6.6.1
Type Task
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component GHC API
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system Unknown
Architecture Unknown
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information