[Haskell-cafe] Compiling a DSL on the shoulders of GHC

Tom Hawkins tomahawkins at gmail.com
Mon Oct 18 09:59:35 EDT 2010


> Yes, that would be the basic idea:
>
> 1. Compile the Haskell metaprogram.
> 2. Evaluate main, possibly with a timeout, in a way that keeps all its
> structure including lambdas accessible (e.g. Core).
> 3. Compile the resulting program with other tools.
>
>> What is this different tool and how does it fit in to your pipeline?
> This tool(set) is a specialised compiler for some low-level target
> platform (FPGA, DSP, GPU - again, no clear decision yet), and it is the
> second half of the pipeline after the GHC phases.

I have nearly the same plan: I want to compile a restrictive form of
Haskell to constant time and space C code for hard realtime embedded
targets.  Except I need a top level monad with different semantics
than IO.

Wouldn't a fake driver (fakeRun :: Something -> IO ()) at least
simplify the problem?  It would prevent you from having to modify GHC
to handle a different top level type.  And during your evaluation of
Core, you would simply ignore fakeRun.

-Tom


More information about the Haskell-Cafe mailing list