Résumé
En théorie des langages fonctionnels typés, une monade est un patron de conception qui combine des éléments de langages fonctionnels avec des méthodologies propres aux langages impératifs. En pratique, les valeurs retournées par des portions de programme (qui peuvent être vus comme des fonctions) sont englobées en un type pour être enchaînées ultérieurement en d'autres calculs. Il s'agit alors d'avoir une représentation simulant exactement des notions telles que les exceptions ou les effets de bords, tout en conservant la logique propre à la programmation fonctionnelle. L'usage des monades présente plusieurs intérêts : analyses statiques et preuves de programmes plus simples, usage de l'appel par nécessité, optimisations (déforestation, mémoïsation de valeurs, parallélisation, ). Une monade peut se voir comme la donnée d'un triplet constitué des trois éléments suivants : un constructeur de type appelé type monadique, qui associe au type le type ; une fonction nommée unit ou return, qui construit à partir d'un élément de type sous-jacent un autre objet de type monadique . Cette fonction est alors de signature ; une fonction bind, représentée par l'opérateur infixe , associant à un type monadique et une fonction d'association un autre type monadique. Il permet de composer une fonction monadique à partir d'autres fonctions monadiques. Cet opérateur est de type . En composant la fonction (dite fonction de liaison) avec la fonction , on peut appliquer n'importe quelle fonction à une monade de type . En ce sens une monade de type est un type algébrique qui dérive du type . La définition précédente s'accompagne de plusieurs axiomes. L'opérateur agit comme une sorte d'élément neutre pour . composition à gauche par (≡ désigne l'égalité structurelle) : composition à droite par : associativité : (ou ) L'utilisation la plus simple des monades consiste à encapsuler un objet de type existant dans un objet portant plus d'information. Par exemple en langage Haskell, une monade de type est ou bien un objet de type t normal, ou bien la valeur .
À propos de ce résultat
Cette page est générée automatiquement et peut contenir des informations qui ne sont pas correctes, complètes, à jour ou pertinentes par rapport à votre recherche. Il en va de même pour toutes les autres pages de ce site. Veillez à vérifier les informations auprès des sources officielles de l'EPFL.