<div dir="ltr">Thanks for pointing that out, this is my first time encountering tagless-final. The use of the :-> data constructor seems to solve a lot of problems. I'm wondering how to introduce a haskell function as an embedded value in such an EDSL but I think I will try it out.<div><br></div><div>Thanks,</div><div>Ian</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Oct 15, 2015 at 8:55 AM, Oleg <span dir="ltr"><<a href="mailto:oleg@okmij.org" target="_blank">oleg@okmij.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
> Ian Bloom wrote:<br>
> I've been hoping to design a domain specific embedded language in<br>
> Haskell that would let me pipe a commutative monad throughout an expression<br>
> written in the language. Special terms within the language will eventually<br>
> have access to this monad.<br>
<br>
<br>
Is there a reason tagless-final approach does not work for you? You<br>
can easily thread any monad, even if you don't make any provision for<br>
it initially. For example,<br>
<br>
        <a href="http://okmij.org/ftp/tagless-final/index.html#call-by-any" rel="noreferrer" target="_blank">http://okmij.org/ftp/tagless-final/index.html#call-by-any</a><br>
        <a href="http://okmij.org/ftp/tagless-final/course/CBAny.hs" rel="noreferrer" target="_blank">http://okmij.org/ftp/tagless-final/course/CBAny.hs</a><br>
<br>
uses monad to print out traces of the expression and then later to<br>
implement lazy evaluation for EDLS (which needs mutable cells).<br>
<br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">718.755.5483<br><a href="http://ianbloom.com/" target="_blank">http://ianbloom.com/</a></div>
</div>