<story><title>What Template Haskell gets wrong and Racket gets right</title><url>http://blog.ezyang.com/2016/07/what-template-haskell-gets-wrong-and-racket-gets-right/</url></story><parent_chain></parent_chain><comment><author>dleslie</author><text>FYI, Racket&amp;#x27;s syntax macros is from its Scheme roots. For further information on what Scheme provides, by standard revision:&lt;p&gt;R5RS: [0]&lt;p&gt;R6RS: [1]&lt;p&gt;R7RS: [2] (Page 22)&lt;p&gt;And many Schemes provide non-standard extensions; for instance, Chicken supports non-hygienic macros[3].&lt;p&gt;FWIW, I prefer to think of the two stages as &amp;quot;syntax expansion&amp;quot; and &amp;quot;evaluation&amp;quot;, and not &amp;quot;compile time&amp;quot; and &amp;quot;run time&amp;quot;. Compilation and running are loaded terms that don&amp;#x27;t appropriately capture the totality of situations where this behaviour applies, in Scheme.&lt;p&gt;0: &lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;schemers.org&amp;#x2F;Documents&amp;#x2F;Standards&amp;#x2F;R5RS&amp;#x2F;HTML&amp;#x2F;r5rs-Z-H-8.html#%_sec_5.3&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;schemers.org&amp;#x2F;Documents&amp;#x2F;Standards&amp;#x2F;R5RS&amp;#x2F;HTML&amp;#x2F;r5rs-Z-H-8...&lt;/a&gt;&lt;p&gt;1: &lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;www.r6rs.org&amp;#x2F;final&amp;#x2F;html&amp;#x2F;r6rs&amp;#x2F;r6rs-Z-H-14.html#node_sec_11.2.2&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;www.r6rs.org&amp;#x2F;final&amp;#x2F;html&amp;#x2F;r6rs&amp;#x2F;r6rs-Z-H-14.html#node_se...&lt;/a&gt;&lt;p&gt;2: &lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;trac.sacrideo.us&amp;#x2F;wg&amp;#x2F;raw-attachment&amp;#x2F;wiki&amp;#x2F;WikiStart&amp;#x2F;r7rs.pdf&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;trac.sacrideo.us&amp;#x2F;wg&amp;#x2F;raw-attachment&amp;#x2F;wiki&amp;#x2F;WikiStart&amp;#x2F;r7r...&lt;/a&gt;&lt;p&gt;3: &lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;wiki.call-cc.org&amp;#x2F;explicit-renaming-macros&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;wiki.call-cc.org&amp;#x2F;explicit-renaming-macros&lt;/a&gt;</text></comment>
<story><title>What Template Haskell gets wrong and Racket gets right</title><url>http://blog.ezyang.com/2016/07/what-template-haskell-gets-wrong-and-racket-gets-right/</url></story><parent_chain></parent_chain><comment><author>kccqzy</author><text>Maybe this is heretical among Haskell lovers, but my personal, rather undeveloped, feeling is that Haskell syntax is too complicated for macros. Sure, Haskell code feels natural to read, but in fact they had a lot of &amp;quot;superficial complexity&amp;quot;[1], i.e. the syntax supports many ways of expressing the same thing. This makes any sorts of introspection at compile-time troublesome. Compile-time code generation is less of a problem but still it makes the experience less pleasant.&lt;p&gt;[1]: Hudak P., Hughes J., Peyton Jones, S., Wadler P. (2007). &lt;i&gt;A History of Haskell: Being Lazy With Class.&lt;/i&gt;</text></comment>