<div dir="ltr">Hi Tim, <div><br></div><div>About using GHC as a library module, have you see the ongoing work on "native metaprogramming" in GHC at</div><div>  <a href="https://ghc.haskell.org/trac/ghc/wiki/NativeMetaprogramming">https://ghc.haskell.org/trac/ghc/wiki/NativeMetaprogramming</a></div><div><br></div><div>and a child project at<br></div><div>   <a href="https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow">https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow</a></div><div> </div><div>There, online code generation is not of the highest priority, rather we are trying to open up the compiler from top to down: </div><div>making available GHC's AST and then the parser and the typechecker have priority over the other functionalities down the pipeline (like the code generator).</div><div><br></div><div>> <span style="font-size:12.8px">If any one wanted to help with this, </span><span style="font-size:12.8px">that would be great.</span></div><div><br></div><div>I am interested to hear more about the approach you have in mind, and would be happy to help.</div><div><br></div><div>Yours, </div><div>  Shayan</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 17, 2017 at 6:05 PM, Tim Sheard <span dir="ltr"><<a href="mailto:sheard@pdx.edu" target="_blank">sheard@pdx.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">After many years of hoping someone else would do this, I would like to<br>
make GHC into a true multi-stage programming language. Here is how I<br>
thought I might approach this.<br>
<br>
1) Use the GHC as a library module.<br>
2) Use the LLVM backend.<br>
<br>
I have no experience with either of these tools.<br>
Lets start simple, How would I write functions like<br>
<br>
compile :: String -> IO PtrToLLVMCode  -- where the string is a small Haskell program.<br>
llvmCompile :: PtrToLLVMCode -> IO PtrToMachineCode<br>
jumpTo:: PtrToMachineCode -> IO ans   -- where ans is the "type" of the string.<br>
<br>
<br>
Any thoughts on how to get started? What papers to read, examples to look at?<br>
<br>
I'd love to move to some more disciplined input type, a sort of (mono) typed program<br>
representation (with similar complexity) to Template Haskell Exp type.<br>
<br>
where (Exp t) is a data structure representing a Haskell program of type t.<br>
<br>
All offers of advice accepted. I'm trying to get started soon, and good advice<br>
about what to avoid is especially welcome.  If any one wanted to help with this,<br>
that would be great.<br>
<br>
Tim Sheard<br>
<br>
______________________________<wbr>_________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/ghc-devs</a><br>
</blockquote></div><br></div>