<story><title>Shen: A Sufficiently Advanced Lisp [video] (2014)</title><url>https://www.youtube.com/watch?v=lMcRBdSdO_U</url></story><parent_chain><item><author>AnimalMuppet</author><text>To me, it seems impossible to have both macros and a type system on par with Haskell.  Either your macros can no longer do arbitrary textural transformations, or your type system can&amp;#x27;t reason about macro cases.  (Or, I suppose, your type system has to run after the macro transformations, and you could get a type error then just like you could get a syntax error then.  But that means your IDE&amp;#x2F;development environment can&amp;#x27;t give you any type assistance on macro calls - you have to compile it to find out if it works.  (Or, I suppose, your IDE has to run the macro for you and then do the type checking on the resulting post-macro code.))&lt;p&gt;I am open to being proven wrong, though...</text></item><item><author>codygman</author><text>Put this in my &amp;quot;watch later&amp;quot; queue. I&amp;#x27;m &lt;i&gt;very&lt;/i&gt; interested in a Lisp whose type system is on par with that of Haskell&amp;#x2F;Ocaml.&lt;p&gt;EDIT: Especially since Shen is now BSD licensed.</text></item></parent_chain><comment><author>necubi</author><text>Scala has macros [0], and as you reasoned the type checker has to run after the macro expansion. That&amp;#x27;s not a huge downside; to the user it still appears to be a single pipeline (parsing -&amp;gt; macro expansion -&amp;gt; type checking -&amp;gt; compilation).&lt;p&gt;Haskell also has very powerful metaprogramming facilities, like template haskell [1].&lt;p&gt;[0] &lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;scalamacros.org&amp;#x2F;&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;scalamacros.org&amp;#x2F;&lt;/a&gt;
[1] &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;wiki.haskell.org&amp;#x2F;Template_Haskell&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;wiki.haskell.org&amp;#x2F;Template_Haskell&lt;/a&gt;</text></comment>
<story><title>Shen: A Sufficiently Advanced Lisp [video] (2014)</title><url>https://www.youtube.com/watch?v=lMcRBdSdO_U</url></story><parent_chain><item><author>AnimalMuppet</author><text>To me, it seems impossible to have both macros and a type system on par with Haskell.  Either your macros can no longer do arbitrary textural transformations, or your type system can&amp;#x27;t reason about macro cases.  (Or, I suppose, your type system has to run after the macro transformations, and you could get a type error then just like you could get a syntax error then.  But that means your IDE&amp;#x2F;development environment can&amp;#x27;t give you any type assistance on macro calls - you have to compile it to find out if it works.  (Or, I suppose, your IDE has to run the macro for you and then do the type checking on the resulting post-macro code.))&lt;p&gt;I am open to being proven wrong, though...</text></item><item><author>codygman</author><text>Put this in my &amp;quot;watch later&amp;quot; queue. I&amp;#x27;m &lt;i&gt;very&lt;/i&gt; interested in a Lisp whose type system is on par with that of Haskell&amp;#x2F;Ocaml.&lt;p&gt;EDIT: Especially since Shen is now BSD licensed.</text></item></parent_chain><comment><author>doublec</author><text>ATS had macros: &lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;ats-lang.sourceforge.net&amp;#x2F;htdocs-old&amp;#x2F;TUTORIAL&amp;#x2F;contents&amp;#x2F;macros.html&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;ats-lang.sourceforge.net&amp;#x2F;htdocs-old&amp;#x2F;TUTORIAL&amp;#x2F;contents...&lt;/a&gt;&lt;p&gt;I&amp;#x27;m not sure if these made it into ATS2 though.</text></comment>