Please see accompanying documentation for a description of Hamlet syntax.
You must ensure that the type of m, url and argument all work properly with
the functions referred to in the template. Of course, worst case scenario is
the compiler will catch your mistakes.

It keeps an Iteratee and a seed value so that it can output values.
Output is all done through a strict Text value.

The URL to String function makes it very convenient to write templates
without knowing the absolute URLs for all referenced resources. For more
information on this approach, please see the web-routes package.

For efficiency, the Hamlet monad halts execution as soon as the underlying
Iteratee returns a Left value. This is normally what you want; this
might cause a problem if you are relying on the side effects of a Hamlet
action. However, it is not recommended to rely on side-effects. Though a
Hamlet monad may perform IO actions, this should only be used for
read-only behavior for efficiency.