Le Haml (HTML Abstraction Markup Language) est un langage de balisage léger pour template (en). Il propose une syntaxe plus simple que celle de la norme HTML pour générer des pages web. Il se veut élégant et minimaliste.
À l'instar de Python ou de Yaml, l'indentation y est importante : elle permet la fermeture automatique des balises et blocs de code.
L'équivalent de Haml pour les feuilles de style en cascade (CSS) est Syntactically Awesome Stylesheets (Sass).
Des écritures simplifiées sont proposées à la place des syntaxes du XML et de certaines écritures HTML courantes :
% au lieu de < et > ;id et class peut être indiqué avec la même syntaxe qu'en CSS ;div peut être omis (c'est l'élément HTML utilisé par défaut).Ainsi, le code Haml suivant :
#sidebar
%ul.main
%li.active
%a(href="accueil.html") Accueil
%li
%a(href="nouvelles.html") Nouvelles
%li.disabled
%a Membres
permet de produire le code HTML suivant :
<div id="sidebar">
<ul class="main">
<li class="active">
<a href="accueil.html">Accueil</a>
</li>
<li>
<a href="nouvelles.html">Nouvelles</a>
</li>
<li class="disabled">
<a>Membres</a>
</li>
</ul>
</div>
L'indentation stricte permet de se rendre compte plus rapidement des erreurs : le document HTML final ne se génère pas s'il y a une erreur de syntaxe. Cela peut par exemple éviter de perdre du temps dans l'analyse de bogues JavaScript interagissant avec le DOM.
Utilisé avec un framework tel que Ruby on Rails et Padrino (en), Haml offre une syntaxe permettant d'insérer facilement des données dans le rendu HTML.
Haml permet d'exécuter des filtres, qui sont généralement des programmes auxiliaires, sur certaines parties du code.