<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:'times new roman', 'new york', times, serif;font-size:12pt"><div>Thanks Jasper ...&nbsp;</div><div>Thanks John,</div><div>While most of the use case I had in mind seems to fit the EDSL description, I had some in the proper DSL category as well...</div><div>So, my prejudice had been towards option one - and I was unable to visualize a situation where option 1 would not work - or become too problematic or option 2 becomes too simple.</div><div><br></div><div>I was just thinking of implementing an OS kernel (monolithic to start with) using Haskell - via option 1. Then again, if I understand right, House was done by modifying GHC ... So, I guess it'll help me if I can see some example situations where modifying GHC's back end would be a better/only option.</div><div><br></div><div>The main reason I am asking this is to make sure I don't miss out some
 obvious pitfall in my OS implementation via option 1.</div><div><br></div><div>Regards,</div><div>Kashyap</div><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><br><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><font size="2" face="Tahoma"><b><span style="font-weight: bold;">From:</span></b> John Van Enk &lt;vanenkj@gmail.com&gt;<br><b><span style="font-weight: bold;">To:</span></b> CK Kashyap &lt;ck_kashyap@yahoo.com&gt;<br><b><span style="font-weight: bold;">Cc:</span></b> haskell-cafe@haskell.org<br><b><span style="font-weight: bold;">Sent:</span></b> Mon, January 4, 2010 10:51:06 PM<br><b><span style="font-weight: bold;">Subject:</span></b> Re: [Haskell-cafe] A question on DSL's<br></font><br>
<div>To start with, can you clarify that you are looking for an Embedded DSL (sometimes called Light Weight DSL)?</div><div><br></div><div>A _proper_ DSL has its own interpreter/compiler where an EDSL/LwDSL leverages the compiler of a host language (in this case, Haskell).</div>
<div><br></div><div>Assuming you're referring to an EDSL, I'll respond. :)</div><div><br></div>I don't think the second option is ever used. Modifying the compiler backend doesn't seem to make a lot of sense to me. I'm not aware of any circumstance where this has been done.<div>
<br></div><div>Your first option is closer. Generally, when emitting some sort of target code from a large EDSL, you'll have two stages. Your first takes the embedded syntax of your EDSL and converts it to an Abstract Syntax Tree. Your second stage accepts the AST as input and emits target code.</div>
<div><br></div><div>Take Tom Hawkins' Atom EDSL as an example. When we write Atom code, we're building up an AST. After the AST is built up, the "compile" function converts the AST to C code.</div><div><br>
</div><div>For smaller EDSLs, it's more than possible to have the functions themselves emit the code we're after (rather than relying on an AST and compile function).</div><div><br></div><div>Is this what you're looking for?</div>
<div><br></div><div>/jve</div><div><br><div class="gmail_quote">On Mon, Jan 4, 2010 at 12:14 PM, CK Kashyap <span dir="ltr">&lt;<a rel="nofollow" ymailto="mailto:ck_kashyap@yahoo.com" target="_blank" href="mailto:ck_kashyap@yahoo.com">ck_kashyap@yahoo.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi,<br>
I am not sure if I'm using DSL in the right context here but I am referring to those solutions that allow us to write code in Haskell and generate a target code source code of another language or even object code for that matter. I am aware of two ways of achieving this -<br>

1. Implement functions that emit the target code - that is, when the Haskell code is compiled and run, the target code is emitted<br>
2. Modify the Haskell compiler's back end to emit the code - that is when the Haskell code is compiled the target code is emitted<br>
<br>
I am not sure if there are more ways (hybrid perhaps) ...<br>
<br>
My question is, &nbsp;when would I chose one approach over the other?<br>
<br>
Regards,<br>
Kashyap<br>
<br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a rel="nofollow" ymailto="mailto:Haskell-Cafe@haskell.org" target="_blank" href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br><span>
<a target="_blank" href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a></span><br>
</blockquote></div><br></div>
</div></div></blockquote><div style="position:fixed"></div>


<!-- cg32.c4.mail.gq1.yahoo.com compressed/chunked Mon Jan  4 08:18:32 PST 2010 -->
</div><br>

      </body></html>