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.
Cours associés (13)
CS-214: Software construction
Learn how to design and implement reliable, maintainable, and efficient software using a mix of programming skills (declarative style, higher-order functions, inductive types, parallelism) and fundam
ENG-209: Data science for engineers with Python
Ce cours est divisé en deux partie. La première partie présente le langage Python et les différences notables entre Python et C++ (utilisé dans le cours précédent ICC). La seconde partie est une intro
CS-452: Foundations of software
The course introduces the foundations on which programs and programming languages are built. It introduces syntax, types and semantics as building blocks that together define the properties of a progr
Afficher plus
Séances de cours associées (24)
Une mise en œuvre simple du FRP
Couvre la mise en œuvre simple des signaux et des Vars dans la programmation réactive fonctionnelle, y compris le maintien des dépendances et les types de fonctions implicites.
Paradigmes de programmation: Fonctionnel, OOP, Polymorphisme
Explore les paradigmes de programmation comme la procédure, la fonctionnalité et l'OPO, avec des exemples en Python.
Monads: Structures de données avec lois
Couvre les monades en tant que structures de données avec des lois et des exemples spécifiques tels que Liste et Option.
Afficher plus
Publications associées (49)

Scala 3 syntax rewriting

Mark Tropin

We present syntax rewriting rules that translate Scala 2 code into Scala 3. Two major syntactic changes are introduced: new control structure syntax and significant indentation. We describe the design and the implementation of these rules and evaluate thei ...
2024

DFT plus U-type functional derived to explicitly address the flat plane condition

Edward Baxter Linscott

A DFT+U-type corrective functional is derived from first principles to enforce the flat plane condition on localized subspaces, thus dispensing with the need for an ad hoc derivation from the Hubbard model. Small, molecular test systems at the dissociated ...
AMER PHYSICAL SOC2023

Representing Monads with Capabilities

Martin Odersky, Aleksander Slawomir Boruch-Gruszecki, Jonathan Immanuel Brachthäuser

Programming with monads can be advantageous even in imperative languages with builtin support for side effects. However, in these languages composing monadic programs is different from composing side effecting imperative programs. This does not need to be ...
2021
Afficher plus
Concepts associés (23)
Haskell
Haskell est un langage de programmation fonctionnel fondé sur le lambda-calcul et la logique combinatoire. Son nom vient du mathématicien et logicien Haskell Curry. Il a été créé en 1990 par un comité de chercheurs en théorie des langages intéressés par les langages fonctionnels et l'évaluation paresseuse. Le dernier standard est Haskell 2010 : c'est une version minimale et portable du langage conçue à des fins pédagogiques et pratiques, dans un souci d'interopérabilité entre les implémentations du langage et comme base de futures extensions.
Uniqueness type
In computing, a unique type guarantees that an object is used in a single-threaded way, with at most a single reference to it. If a value has a unique type, a function applied to it can be optimized to update the value in-place in the object code. Such in-place updates improve the efficiency of functional languages while maintaining referential transparency. Unique types can also be used to integrate functional and imperative programming. Uniqueness typing is best explained using an example.
Monade (théorie des catégories)
Une monade est une construction catégorique qui mime formellement le comportement que les monoïdes ont en algèbre. Introduite par Roger Godement sous le nom de « construction standard », la notion est d'abord diffusée sous le nom de triple avant d'être baptisée monade par Jean Bénabou. Elles permettent notamment de formuler des adjonctions et ont (au travers des comonades) un rôle important en géométrie algébrique, notamment en théorie des topos. Elles permettent également de définir les , dont les .
Afficher plus
MOOCs associés (15)
Parallelism and Concurrency
(merge of parprog1, scala-reactive, scala-spark-big-data)
Functional Programming
In this course you will discover the elements of the functional programming style and learn how to apply them usefully in your daily programming tasks. You will also develop a solid foundation for rea
Functional Programming Principles in Scala [retired]
This advanced undergraduate programming course covers the principles of functional programming using Scala, including the use of functions as values, recursion, immutability, pattern matching, higher-
Afficher plus

Graph Chatbot

Chattez avec Graph Search

Posez n’importe quelle question sur les cours, conférences, exercices, recherches, actualités, etc. de l’EPFL ou essayez les exemples de questions ci-dessous.

AVERTISSEMENT : Le chatbot Graph n'est pas programmé pour fournir des réponses explicites ou catégoriques à vos questions. Il transforme plutôt vos questions en demandes API qui sont distribuées aux différents services informatiques officiellement administrés par l'EPFL. Son but est uniquement de collecter et de recommander des références pertinentes à des contenus que vous pouvez explorer pour vous aider à répondre à vos questions.