Hi Tim,<div><br></div><div>Several years ago I wrote a proof of concept of one way to implement this in Haskell, <a href="http://johnlato.blogspot.com/2012/10/runtime-meta-programming-in-haskell.html">http://johnlato.blogspot.com/2012/10/runtime-meta-programming-in-haskell.html</a>.</div><div><br></div><div>I used TH to automatically lift expressions into a newtype-wrapped ExpQ that could be used for staged evaluation. More than one stage would probably have been tedious though, and a major problem with any non-trivial code was getting all the imports in place. I do think it would have been possible to automatically track imports though.</div><div><br></div><div>Of course that was 5 years ago, so state of the art has moved on. TH has better facilities for this now, and the ghc API probably has something better too.</div><div><br></div><div><br><div class="gmail_quote"><div dir="ltr">On Fri, Nov 17, 2017, 10:06 Tim Sheard <<a href="mailto:sheard@pdx.edu">sheard@pdx.edu</a>> wrote:<br></div><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<br>
Haskell program.<br>
llvmCompile :: PtrToLLVMCode -> IO PtrToMachineCode<br>
jumpTo:: PtrToMachineCode -> IO ans   -- where ans is the "type" of the<br>
string.<br>
<br>
<br>
Any thoughts on how to get started? What papers to read, examples to<br>
look at?<br>
<br>
I'd love to move to some more disciplined input type, a sort of (mono)<br>
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<br>
advice<br>
about what to avoid is especially welcome.  If any one wanted to help<br>
with this,<br>
that would be great.<br>
<br>
Tim Sheard<br>
<br>
_______________________________________________<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-bin/mailman/listinfo/ghc-devs</a><br>
</blockquote></div></div>