[web-devel] Hamlet syntax suggestion

Max Cantor mxcantor at gmail.com
Fri May 13 03:55:32 CEST 2011


how about adding standard haskell case matching to hamlet instead?  its very general, well understood, and covers many use cases.  $if and $maybe can be left in but they would basically just be sugar for the corresponding case statements?  if wouldn't cover the case with the commas that neil mentioned or view patterns, but would still be very general:

$case boo of
  ${Left x} -> did not finish
  ${Right 1} -> you came in first
  ${Right n} -> loser



  
On May 13, 2011, at 4:08 AM, Neil Mitchell wrote:

> Hi,
> 
> I am thinking of doing a project using Hamlet (and perhaps a little of
> Yesod, I'm not quite sure). As I was reading through the book
> (excellent resource!) I was surprised by the syntax for $maybe, in
> particular that you get case matching on only the Maybe type. Being
> used to Haskell I'm a fan of general solutions, so I commented on the
> book (http://www.yesodweb.com/book/templates#c5). Since book comments
> aren't really the right place to discuss something technical I thought
> I'd move it here.
> 
> Currently Hamlet has:
> 
> $if a; $elseif b; $else
> 
> $maybe x <- ma; $nothing
> 
> I think if $if was expanded to be pattern guards, rather than boolean
> expressions, it would be more powerful, yet remain just as easy to
> use. So, I'd like:
> 
> $if Just x <- ma
> 
> To be equivalent to:
> 
> $maybe x <- ma
> 
> Then $else and $nothing also become equivalent.
> 
> If you also allow commas you can write things like:
> 
> $if Just x <- age, x > 18
>   adults
> $else
>   kids
> 
> These have a very simple explanation - they're just pattern guards.
> Michael wants Hamlet to remain simple, in order to allow designers to
> use it without knowing programming. I think that's a reasonable goal,
> but I don't think a richer syntax for $if would make it any harder in
> the common case. I also think that if inexperienced people have to do
> more advanced tricks - i.e. converting their ADT into nested Maybe
> values in order to do some case analysis, it's going to end up harder
> in the long run.
> 
> I had two other, smaller thoughts, while reading the book:
> 
> 1) $for x <- xs, x > 12 could be used to generalise $for to list
> comps. However, I notice you've got $for working over anything
> Foldable, rather than just lists, so it's not necessarily such a clear
> conversion. It's probably also less useful - since filter isn't too
> bad - and you can always do $for x <- [x | x <- xs, x > 12]
> 
> 2) CoffeeScript makes Javascript much more useful. It would be very
> cool if as well as Julius there was something more like CoffeeScript,
> or perhaps exactly CoffeeScript. I also idly wondered if you could
> translate Haskell syntax to Javascript (without the types), but
> perhaps that isn't such a great idea.
> 
> Thanks, Neil
> 
> _______________________________________________
> web-devel mailing list
> web-devel at haskell.org
> http://www.haskell.org/mailman/listinfo/web-devel




More information about the web-devel mailing list