Here's how I'd write that example in Ur/Web. I don't see an obvious
difference in pleasantness vs. the Hamlet style.
fun mymodule (items : list string) : xbody = <xml>
<h3>title</h3>
<div>
{case items of
[] => <xml><p>Sorry, no items left</p></xml>
| _ => <xml><ul>{List.mapX (fn item =>
<xml><li><b>{[item]}</b></li></xml>) items}</ul></xml>}
</div>
</xml>
On 06/18/2015 09:54 AM, Gabriel Riba wrote:
Correction:
his indented xml has been designed as a template system for the yesod
web framework (http://www.yesodweb.com/).
Lets make a comparison with equivalent code:
(* --- hamlet style template *)
fun mymodule items = <ixml>
<h3> title
<div>
$if {null items}
<p> Sorry, no items left
$else
<ul>
$forall {item} <- {items}
<li> <b>{[item]}</b>
</ixml>
(* ---------- without hamlet ---- *)
val emptyListSnippet = <xml>
<p> Sorry, no items left</p>
</xml>
fun listItemSnippet item = <xml>
<li> <b>{[item]}</b> </li>
</xml>
fun listSnippet items =
List.foldr join <xml/> <|
List.map listItemSnippet items
fun mymodule items =
<xml>
<h3>title</h3>
<div> { if null
then emptyListSnippet
else <xml>
<ul>
{listSnippet items}
</ul>
</xml>
}
</div>
</xml>
_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur