Ce site est désormais généré avec Hakyll

27 Novembre 2016

Cet article est un brouillon.

This article is a draft.

Cet article aurait pu s’intituler Pourquoi Hakyll est le seul générateur de sites statiques dont vous aurez jamais besoin — mais c’est peut-être un peu excessif.

La première version statique de ce site a été produite par un script Python maison, dont il ne reste nulle trace (et c’est heureux), rapidement remplacé par Jekyll. Jekyll est désormais remplacé par Hakyll, qui, contrairement à ce que son nom laisse penser, n’est pas un clone en Haskell de Jekyll, mais un projet totalement différent.

Hakyll ne se configure pas, il se programme

Jekyll (et la plupart des autres CMS statiques) se configure avec un fichier Yaml qui permet de fixer l’essentiel des paramètres du site. C’est d’une très grande simplicité, mais c’est simple comme un vélo sans guidon: c’est bien pour faire ce que le logiciel a prévu, comme il l’a prévu, et rien d’autre.

Hakyll utilise un mode de configuration infiniment plus puissant (et donc bien plus complexe) qui consiste à écrire du code. C’est un idiome assez répandu dans le monde Haskell, que j’avais déjà croisé dans XMonad, qui consiste à fournir quelque chose à mi-chemin de la librarie et du framework: la configuration consiste tout simplement à écrire la fonction main, ce qui est en fait très malin.

Utiliser du code comme configuration n’est pas très original, ni spécifique à Haskell. Lua est très utilisé pour cela (par exemple dans Mjolnir et son fork Hammerspoon, ou le gestionnaire de fenêtres awesome), tout comme Python (QTile) ou encore JavaScript (Slate). Mais avec ces langages, la limite est toujours la même: dans la mesure où le programme s’exécute, puis charge (exécute) la configuration, celle-ci est nécessairement limitée par ce que le programme permet de configurer (les variables qu’il va effectivement lire, les hooks qu’il connaît, etc.). Le seul langage où on trouve une puissance comparable à celle de cet idiome, c’est TeX, mais TeX n’est rien de plus qu’un langage spécialisé. Je suspecte qu’Haskell est très utilisé pour cela principalement parce qu’il permet de construire des langages dédiés directement à Haskell, qu’on peut manipuler sans maîtriser le langage sous-jacent (et aussi par passion pour le fonctionnel pur, bien sûr)

Je ne connais pas le nom de cet idiome. Ce n’est pas stricto sensu un framework, puisqu’un framework se caractérise par l’inversion du contrôle (IoC), mais ce n’est pas non plus une librairie, qui fournit des fonctions utilisables dans n’importe quel autre programme, ce qui n’est pas vraiment le cas de Hakyll ni de XMonad.