La programmation fonctionnelle est souvent résumée à la manipulation de fonctions, que l'on peut passer en argument ou renvoyer. En somme, programmer avec des lambdas. Cette flexibilité de la manipulation de fonctions permet d'utiliser des opérateurs pour les composer, donnant lieu à un style de programmation que l'on appelle la "programmation tacite", ou "point-free", relativement populaire dans le monde Haskell, qui permet, malheureusement, très souvent, d'écrire des abominations, rendant le code illisible et incroyablement complexe à raisonner ! C'est pour cela que l'on lit très souvent qu'il n'y a pas de mérite à écrire des programmes dans ce style (et pour cause, une machine peut transformer du code normal en point-free et vice-versa).
Pourtant, il arrive parfois que les outils que l'on veuille
manipuler soient "des genres de fonctions, et que la grammaire du langage ne
permette pas de les manipuler trivialement. L'utilisation d'un encodage
similaire à la programmation tacite est l'utilisation de la méthode .then
, en
JavaScript, avant l'intégration des marqueurs async/await
, dont le rôle était
de palier l'expressivité du langage avec une approche abstraite. Dans cette
présentation, je vous propose de redécouvrir la programmation tacite, dans des
contextes où c'est pertinent, permettant de mettre en avant l'abstraction
pour généraliser des comportements. Découvrons ensemble le polymorphisme
paramétrique, la variance (ou polarité) et la très amusante famille des
profoncteurs et des Arrows pour abstraire l'application de fonctions,
permettant de traiter, génériquement, des objets qui ressemblent à des
fonctions.