I will say some things in defense of templating languages. Don't get me wrong, these are good points about direct embedding as well.
First thing: creating shorthand functions is somewhat time consuming and feels a lot like busy work. It's also really heavy on RSI, too much of that kind of work and my hands start to pain. Having said that, once the templates have been created it could also save on typing, especially in the form of larger layouts and widgets... however, getting to that point might take some time and a lot of tedious work.
These short snippets aren't really representative of what goes on in a full blown app. Never-the-less, for comparison, here's a tiny snippet in elm-html:
section [class "container", id "my-page"]
[ div [class "row"]
[ div [class "col-md-2 col-sm-3"]
[ -- etc...
]
]
]
...and in jade:
section.container#my-page
.row
.col-md-2.col-sm-3
//- etc...
I agree that embedding a logical language inside a templating language is not really very desirable, but it's also entirely unnecessary - a little bit of interpolation would go all the way in my opinion. The trouble that templating languages run into is that they need to deal with fragments of the templates themselves, but this is not a problem in Elm because Html is just a value. You would only need two* special forms of interpolation:
foo =
let contents title = jade """
form(name="#{title}") //- You would need string interpolation... (possibly with toString automatically)
"""
in jade """
section.container
.row
.col-md-2.col-sm-3
{{contents "Foo"}} //- ...and Html interpolation
"""
* ...and actually, those two forms of interpolation could be only one if it takes context into account.
My last defense is going to be that the direct embedding is not always as nice and clean as presented in many of these posts. You do tend to get <|, |>, :: and ++ sprinkled around when you start building composites; this is likely to look rather arcane to newcomers. I can imagine situations where you'd like to employ a contract designer for a small amount of time... In this scenario it would be nice if they could make small layout changes and without needing to teach them much about Elm.
All that said:
I think templating languages like this is going to be inevitable. Somebody is going to do this, it's just a matter of time (assuming that Elm makes it mainstream). I don't really think this is right time to be worrying about this kind of thing though - except perhaps considering string interpolation as a language feature.
If anyone really wants to do something cool for html right now my suggestion would be an
elm-html-focus counterpart to Evan's
focus library that lets you manipulate Html in a jQuery-like (yet purely functional) fashion. I feel that this kind of thing would likely get yourself and Elm some really nice press if it's well thought out :-)