Il existe de très nombreuses façons d’aborder les monades, en témoignent les 85 articles sur le sujet que je donne en lien dans la conclusion. Nécessairement, certaines plaisent plus aux uns ou aux autres. Pour ma part, je trouve justement qu’on manque de cours utilisant une approche « pragmatique », c’est-à-dire ne faisant pas appel à des concepts mathématiques, aussi basiques (en apparence, du moins) soient-ils.
Je comprends tout à fait l’approche par la généralisation du concept de composition de fonctions, et d’ailleurs, je l’évoque en passant dans la dernière section. Mais de mon expérience, le fait même de généraliser un concept abstrait est un obstacle à la compréhension de beaucoup de gens : sans cela, on n’aurait aucun mal à faire comprendre les groupes ou les espaces vectoriels…
D’où mon approche.
En fait, la plupart des abstractions fournies par un langage peuvent se réencoder dans un autre langage (les types algébriques, les pointeurs), seulement cela ne veut pas dire que c'est intéressant de le faire.
Je ne suis que moyennement d’accord avec cette affirmation. Faire de la POO en Haskell, ce n’est pas possible, et le C++ se prête très mal à simuler des types algébriques de données (et je parle pas de Python…). Du coup, le fait qu’il soit possible de créer une monade dans un langage impératif est relativement significatif.
Maintenant, je n’ai pas forcément assez insisté sur le fait que c’est effectivement un outil peu adapté au paradigme, je vais corriger ce point-là.
Du coup je me demande quelles sont des motivations pour la partie "Un outils multi-language" ? En quoi cela permet au lecteur de mieux comprendre la monade (la question peut s'adresser aussi aux lecteurs) ?
La quasi-totalité des tutos sur les monades parlent uniquement de Haskell. C’est compréhensible, c’est clairement le langage le plus adapté pour en parler. Le but de cette section, c’est de montrer que Haskell est loin d’être le seul langage où les monades peuvent être un outil adapté. D’où quelques exemples de monades qui marchent bien… et quelques exemples de monades qui ne marchent pas.
Un exemple un peu plus concret à mon avis, et qui permet de vraiment comprendre l'intérêt des monades dans des cas d'utilisations conrets c'est de faire un interpréteur pour un langage hyper réduit.
C’est typiquement le genre de choses que je veux éviter. Faire un interpréteur pour un langage créé pour l’occasion, à mes yeux, ça tient plus de la branlette intellectuelle que d’un bon exemple d’utilisation concrète. Alors qu’un calcul simple dans lequel se glisse un résultat impossible, tout le monde comprend.
Il y a aussi l’exemple de la recherche dans une base de données généalogique, où les fonction père
et mère
peuvent échouer à chaque génération. C’est sur ça que j’étais parti au départ, mais ça demandait un code beaucoup plus encombré pour que les exemples fonctionnent sans intervention extérieure, donc j’ai laissé tomber.
C’est aussi mon point de vue, d’où le fait que je n’en parle pas dans mon cours. Je laisse à quelqu’un d’autre le soin de le faire.