xvw.lol

2023-10-24 11:19:35

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 !

Lambda Nantes

Liens relatifs à l'évènement.

Papiers évoqués

Quelques liens vers les papiers évoqués durant l'évènement.