Monade (informatique)

Monade (informatique)
Page d'aide sur l'homonymie Pour les articles homonymes, voir Monade.

On se place dans le cadre de la programmation fonctionnelle typée.

Sommaire

Concepts

Définition formelle

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 t le type M(t)
  • Une fonction nommée unit ou return qui construit à partir d'un élément de type sous-jacent a, un autre objet de type monadique M(a). Cette fonction est alors de signature return : t \rightarrow M(t).
  • 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 >>= : M(t) \rightarrow (t\rightarrow M(u)) \rightarrow M(u).

En composant la fonction >>= (dite fonction de liaison) avec la fonction return, on peut appliquer n'importe quelle fonction g:t\rightarrow t à une monade de type M(t). En ce sens une monade de type M(t) est un objet qui dérive du type t.

Axiomes

La définition précédente s'accompagne de plusieurs axiomes[1]. L'opérateur return agit comme une sorte d'élément neutre pour > > > = .

  • composition à gauche par return ( désigne l'égalité structurelle) :
    ((return x) >>= f)(f x)
    
  • composition à droite par return :
    (m >>= return) ≡ m
    
  • associativité :
    (m >>= f) >>= g ≡ m >>= ( \x -> (f x >>= g) )
    

Plus formellement, on obtient les axiomes suivants :

  • (\text{return} \; x) \gg\!= f \equiv f \; x
  • m \gg\!= \text{return} \equiv m
  • (m \gg\!= f) \gg\!= g \equiv m \gg\!= \lambda x \; . \; (f \, x \gg\!\!= g)


Utilisation des monades

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 Maybe(t) est ou bien un objet de type t normal, ou bien la valeur Nothing. Cela permet de traiter de façon élégante les opérations interdites.

Une autre utilisation fondamentale des monades est la gestion des entrées/sorties dans un programme Purement fonctionnel, c'est-à-dire sans effets de bord. C'est le cas de la monade IO(t) en Haskell, qui représente un programme impératif sans paramètre et renvoyant une valeur de type t. Ainsi getLine est une action de type IO(String), un programme impératif qui lorsqu'il est exécuté renvoie une chaîne de caractères (celle tapée au clavier). Confirmons qu'un programme impératif renvoyant un t est une monade. A tout objet o de type t on peut associer le programme trivial return \; o qui renvoie toujours o. C'est d'ailleurs l'origine de la notation return pour les types monadiques. Ensuite étant donné une fonction g:t→t il est naturel de pouvoir l'appliquer à un programme qui renvoie un t, cela donne un autre programme qui renvoie un t. On peut voir cette opération comme la concaténation du code source du premier programme et du code de la fonction g.

La programmation fonctionnelle contourne ainsi le problème des entrées/sorties (naturellement des effets de bords) par la manipulation de ces programmes impératifs eux-mêmes et non des valeurs qu'ils retournent. Pour se fixer les idées, on peut se dire qu'une monade de type IO(int) est le code C d'un programme renvoyant un entier. Ainsi le type IO(int) est complètement légitime dans le cadre fonctionnel puisque que c'est simplement du texte. Lors de la compilation du programme fonctionnel, ces monades seront traduites en code machine qui aura l'effet attendu lorsqu'il sera exécuté.

Voir aussi

Notes et références

Liens externes


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Monade (informatique) de Wikipédia en français (auteurs)

Игры ⚽ Поможем решить контрольную работу

Regardez d'autres dictionnaires:

  • Monade — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Sur les autres projets Wikimedia : « Monade », sur le Wiktionnaire (dictionnaire universel) Une monade (du grec μονάς , qui vient du mot… …   Wikipédia en Français

  • Monades — Monade Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom …   Wikipédia en Français

  • Liste en compréhension — En programmation informatique, la syntaxe de certains langages de programmation permet de définir des listes en compréhension, c est à dire des listes dont le contenu est défini par filtrage du contenu d une autre liste selon un principe analogue …   Wikipédia en Français

  • Comprehension de liste — Compréhension de liste Une liste, comme un ensemble, peut être définie par la donnée d une propriété caractéristique de ses éléments, on dit qu on l a définie en compréhension. Comme cette construction offre des avantages de lisibilité et de… …   Wikipédia en Français

  • Compréhension De Liste — Une liste, comme un ensemble, peut être définie par la donnée d une propriété caractéristique de ses éléments, on dit qu on l a définie en compréhension. Comme cette construction offre des avantages de lisibilité et de concision, certains… …   Wikipédia en Français

  • Compréhension de liste — Une liste, comme un ensemble, peut être définie par la donnée d une propriété caractéristique de ses éléments, on dit qu on l a définie en compréhension. Comme cette construction offre des avantages de lisibilité et de concision, certains… …   Wikipédia en Français

  • Fleches dans la programmation fonctionnelle — Flèches dans la programmation fonctionnelle En informatique les flèches fournissent une interface plus générale au calcul que les monades. Les monades fournissent une interface séquentielle au calcul ; on peut construire un calcul à partir d …   Wikipédia en Français

  • Flèches Dans La Programmation Fonctionnelle — En informatique les flèches fournissent une interface plus générale au calcul que les monades. Les monades fournissent une interface séquentielle au calcul ; on peut construire un calcul à partir d une valeur, ou séquencer deux calculs. Les… …   Wikipédia en Français

  • Flèches dans la programmation fonctionnelle — En informatique les flèches fournissent une interface plus générale au calcul que les monades. Les monades fournissent une interface séquentielle au calcul ; on peut construire un calcul à partir d une valeur, ou séquencer deux calculs. Les… …   Wikipédia en Français

  • G.W. Leibniz — Gottfried Wilhelm Leibniz Pour les articles homonymes, voir Leibniz (homonymie). Gottfried Wilhelm Leibniz Philosophe et Scientifique Époque Moderne …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”