<div><div><div>It is clear from my experience working with html that hamlet has the right idea. The one time I worked on a HAML (the original hamlet, for Ruby) project professionally it was wonderful. However, the 
actual hamlet syntax could be implemented more nicely and that there is an opportunity for the syntax to be more similar to html. In particular, I 
would much rather have white space (and quotes where needed) than 
exclamation marks. Here is one possible alternative: 
<a href="https://github.com/stonean/slim" target="_blank">https://github.com/stonean/slim</a></div><div><div>With this style you end up with something like this:</div><div><br></div><div>form action=url</div><div>  = text</div>


<div>  #id.class</div>
</div><div><br></div><div>But a more practical syntax could allow compatibility with existing html- 
this has always been the main weakness of these newer systems. As I said, I have only worked on 1 HAML project, but have used standard templates for everything else. Even after a proper converter is built, the different syntax is a 
point of pain. Compatibility would also help remove part of the 
criticism that Yesod is off in its own little world.</div><div><br></div><div>Instead
 of &#39;%body&#39; why not &#39;&lt;body&#39;. A closing angle bracket is required to begin text on the same line for 
the tag- &#39;&lt;body&gt;text&#39;.  The alternative of just having a space &#39;&lt;body text&#39; would be ambiguous with respect to attributes that have no value and be less html compatible. The &#39;attribute=&quot;name&quot;&#39; style would be kept 
although the quotes are optional- &#39;&lt;body class=page1&#39;,  or &#39;&lt;body 
class=&quot;page1&quot;&gt;&#39; would also be acceptable for compatibility and 
closing over white space. Of course, the id and class shortcuts would be
 available- &#39;&lt;body.page1&#39;</div><div><br></div><div>If
 the previous tag has no inner text on its line and the next indented 
line does not start with a &#39;#&#39;, &#39;&lt;&#39;, or &#39;.&#39; then it is the inner text
 of the previous tag.</div><div><br></div><div>&lt;body.page1</div><div>  text</div><div>  #id.class</div><div><br></div><div>And the advantage is that it looks much more similar to html, and has easier compatibility. Given</div>


<div>&lt;body class=&quot;page1&quot;&gt;</div>
<div>  text</div><div>  &lt;div id=&quot;id&quot; class=&quot;class&quot; title=&quot;div&quot;&gt;div text&lt;/div&gt;</div><div>&lt;/body&gt;</div><div><br></div><div>This could actually be parsed as valid if the indentation was consistent. However, at the point one is correcting indentation one might as well remove closing tags.</div>



<div>The
 only thing that needs be done for the html to be parsed is consistent 
indentation and removal of closing tags. For the div above it 
might be possible to even keep the closing tag. If that were done it might be possible to allowing multiple tags on one line for the sake of easier html importing.</div><div><br></div><div><div>&lt;body class=&quot;page1&quot;&gt;</div>


<div>  text</div><div>  &lt;div id=&quot;id&quot; class=&quot;class&quot; title=&quot;div&quot;&gt;&lt;h2&gt;title&lt;/h2&gt;&lt;p&gt;div text&lt;/p&gt;&lt;/div&gt;</div>
<div>&lt;/body&gt;</div></div><div><br></div><div>But the general idea is that html can be copied into a Hamlet template and quickly converted into valid Hamlet. Then it is up to the developer whether to spend the time to compact things even more once the template can be parsed.</div>



<div><br></div><div><div>&lt;body.page1</div><div>  text</div><div>  #id.class title=div</div><div>    &lt;h2&gt;title</div><div>    &lt;p&gt;div text</div></div><div><br></div><div>That&#39;s not so scary, is it?</div><div>


<br></div><div>One possible alternative syntax would be for a div with a class or id to still require the opening angle bracket- &#39;&lt;#id.class&#39;. This might be more visually appealing when text is placed on the same line: &#39;&lt;#id.class title=div&gt;text&#39; instead of &#39;#id.class title=div&gt;text&#39;. Perhaps both could be allowed.</div>


<div><br></div>
</div></div><div><div>Michael Snoyman is &quot;intrigued&quot; by this proposal and pointed out that because &#39;&lt;&#39; is not used in Hamlet it would be possible to maintain a backwards compatible mode. However, we both don&#39;t want to fracture the community- this is a proposal to permantenly improve things and then deprecate the previous syntax, providing a converter to upgrade.</div>



<div><br></div><div>I would appreciate feedback from some haskellers. Are there any limitations are drawbacks to such a syntax, or is it just different? Does this appeal to you more hamlet? Will this make a convert out of anybody who runs away screaming when they see a hamlet template?</div>



<div><br></div><div>Greg Weber</div></div>