Le 23 Octobre 2023, hier, j'ai eu l'occasion (et le plaisir) d'organiser, dans les bureaux nantais de PaloIT, la quatrième édition de LambdaNantes. J'y ai parlé de Build Systems (et je tâcherai d'écrire un véritable article sur mes lectures) et Nicolas Rinaudo y a présenté une reconstruction des Free monads (où, monade gratuite pour un foncteur). La présentation était excellente, très bien construite, avec un storytelling soigné. Un peu trop longue pour que je la synthétise (et je sais de sources sûres qu'elle sera le sujet d'un article compagnon sur le site de Nicolas), je voudrais m'arrêter sur un point que j'ai trouvé amusant.
Très souvent, quand les Free Monads sont évoquées, on peut observer cette définition (qui est évidemment correcte) :
data Free f a =
| Pure a
| Free (f (Free f a))
Dans sa reconstruction, Nicolas propose des noms alternatifs :
data Free f a =
| Pure a
| Flatten (f (Free f a))
Même si ça ne change absolument pas l'usage de Free, je trouve que
cette reformulation met, très nettement, en lumière, le fait que
Free est, en fait, représentation défonctionnalisée d'une monade
décrite au moyen de map
, qui est provisionné par le foncteur, de
pure
et de flatten
(aussi parfois appelé join
). Ce qui permet
d'esquisser Freer
, qui est la monade gratuite sur un constructeur
de type et qui elle, utilise la description via pure
et flatmap
.
C'était un très chouette événement et la présentation de Nicolas, bien que parlant d'un sujet que je pensais maitriser, m'a ouvert des opportunités pédagogiques !