The Nikola GPU programming system has a very neat, flexible approach to how you compile the EDSL-generated code.  You can do it dynamically, calling nvcc at runtime, OR it can play a trick where it calls nvcc at compile time (via template haskell) and caches the result in a string literal within the TH-generated Haskell code. <div>

<br></div><div>That is a pretty cool trick IMHO.  Moreover, we can do that with any tool that generates C code or native code, as follows: </div><div><br></div><div>At compile time, via Template Haskell:</div><div><ol><li>

call tool which creates C code</li><li>create temp files and call C compiler </li><li>load resulting object file as a bytestring and store it as a string constant</li></ol><div>Then at runtime:</div><div><ol><li>put bytestring back into a file</li>

<li>call dlopen</li><li>call dlsym, get FunPtr, voila!</li></ol><div>Anyway, I was going to put together a simple library that encapsulates the above steps.  Such a library could be used, for example, in making <a href="http://people.csail.mit.edu/yuantang/">this stencil compiler project</a> available to Haskell users as well as C++ users.  (The compiler is written in Haskell already anyway!)  </div>

<div>   But first I thought I&#39;d ask if this already exists.  Also, is there a better way to do it?  In particular, is there any way to get static linking to work, rather than the silliness with strings, tempfiles, and dlopen.</div>

<div><br></div><div>Thanks,</div><div>  -Ryan</div><div><br></div></div></div>