<div dir="ltr">Implementing that feature was amazingly simple. I&#39;m still not 100% sold on the syntax, as I&#39;m worried it&#39;s complicated Hamlet too much. But having the feature available probably isn&#39;t too dangerous. It also doesn&#39;t cause any problems with existing code as far as my tests go.<div>
<br></div><div>As a bonus, the $forall/$maybe issue was very easy to solve: just surround it with parentheses.</div><div><br></div><div>[$hamlet|</div><div>$forall ((foo bar) baz) bin</div><div>   $bin$</div><div>|]</div>
<div><br></div><div>Code&#39;s up on github, let me know what you think.</div><div><br></div><div>Michael<br><br><div class="gmail_quote">On Fri, Jul 23, 2010 at 4:22 PM, Mark Bradley <span dir="ltr">&lt;<a href="mailto:barkmadley@gmail.com">barkmadley@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">On Fri, Jul 23, 2010 at 7:31 PM, Michael Snoyman &lt;<a href="mailto:michael@snoyman.com">michael@snoyman.com</a>&gt; wrote:<br>

&gt; It&#39;s true that it won&#39;t be a runtime hit at all, so the parsing complexity<br>
&gt; isn&#39;t a concern from that perspective. I *am* worried about making Hamlet<br>
&gt; too complicated however. Does anyone else out there have an opinion on this<br>
&gt; topic?<br>
&gt; Actually, using the new period-not-required syntax, your example could be<br>
&gt; rewritten:<br>
&gt; [$hamlet|^(template f) x^|]<br>
<br>
</div>i like that<br>
<div class="im"><br>
&gt; which is definitely easier on my eyes. However, that syntax would not be<br>
&gt; available in $forall, $maybe et al.<br>
<br>
</div>an interesting perspective of this would be to use syntax in the<br>
forall to show that you are working with a list (not sure how this<br>
could be extended for maybe et al.)<br>
$forall [(map snd) tupleList] val<br>
<div class="im"><br>
&gt; Michael<br>
&gt; PS: I like your e-mail address.<br>
<br>
</div>Cheers,<br>
<font color="#888888">Mark<br>
</font><div><div></div><div class="h5"><br>
&gt;<br>
&gt; On Thu, Jul 22, 2010 at 1:49 PM, Mark Bradley &lt;<a href="mailto:barkmadley@gmail.com">barkmadley@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; looking at the code it does appear that your grammar for ContentEmbed<br>
&gt;&gt; objects could be extended to include lparen and rparen&#39;s.  I&#39;m not<br>
&gt;&gt; sure exactly how this would translate with the deref function in<br>
&gt;&gt; Text.Hamlet.Quasi (i havent used template haskell before) but it looks<br>
&gt;&gt; like it is entirely possible, meaning my example would become:<br>
&gt;&gt;<br>
&gt;&gt; fun f x = [$hamlet| ^(template.f).x^ |]<br>
&gt;&gt;<br>
&gt;&gt; and all is well.  you could add an encoding for this such as:<br>
&gt;&gt;<br>
&gt;&gt; template.f,x<br>
&gt;&gt;<br>
&gt;&gt; this would have the same effect as the $ function from regular haskell.<br>
&gt;&gt;<br>
&gt;&gt; the problem with that encoding is that is it less general than just<br>
&gt;&gt; allowing parens and probably more error prone.<br>
&gt;&gt;<br>
&gt;&gt; the good thing about this is that it doesn&#39;t really matter how<br>
&gt;&gt; complicated you make the encoding and parsing and haskell code<br>
&gt;&gt; generation because it happens once at compile time.<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Jul 21, 2010 at 2:41 PM, Michael Snoyman &lt;<a href="mailto:michael@snoyman.com">michael@snoyman.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Wed, Jul 21, 2010 at 4:17 AM, Mark Bradley &lt;<a href="mailto:barkmadley@gmail.com">barkmadley@gmail.com</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; hamlet doesn&#39;t appear to support functions that take more than one<br>
&gt;&gt; &gt;&gt; argument.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; i.e.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; fun f x = [$hamlet| ^template.f.x^ |]<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; produces the call template (f x)<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; is there some way to make hamlet produce (template f) x?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Unfortunately not. It&#39;s not any *technical* limitation in Hamlet, just<br>
&gt;&gt; &gt; that<br>
&gt;&gt; &gt; I can&#39;t think of a good, intuitive syntax for it. The way that I work<br>
&gt;&gt; &gt; around<br>
&gt;&gt; &gt; this is by defining variables in a where clause, eg<br>
&gt;&gt; &gt; fun f x = [$hamlet|^templateTmp^|] where templateTmp = template f x<br>
&gt;&gt; &gt; If you have better ideas, I&#39;m open to hearing them ;).<br>
&gt;&gt; &gt; Michael<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br></div></div>