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 |