Question

En apprenant Haskell, j'ai fait face à de nombreux tutoriels en essayant d'expliquer ce que sont les monades et pourquoi les monades sont importantes à Haskell. Chacun d'eux a utilisé des analogies afin qu'il soit plus facile d'attraper le sens. À la fin de la journée, je me suis retrouvé avec 3 différences de vue de ce qu'est une monade:

Voir 1: Monad comme étiquette

Parfois, je pense qu'une monade comme étiquette à un type spécifique. Par exemple, une fonction du type:

myfunction :: IO Int

MyFunction est une fonction qui, chaque fois qu'il est effectuée, donnera une valeur int. Le type du résultat n'est pas int mais io int. Ainsi, IO est une étiquette de la valeur int en avertissant l'utilisateur de savoir que la valeur int est le résultat d'un processus où une action IO a été effectuée.

Par conséquent, cette valeur int a été marquée comme une valeur provenant d'un processus avec IO, donc cette valeur est "sale". Votre processus n'est plus pur.

Voir 2: Monad comme un espace privé où des choses désagréables peuvent arriver.

Dans un système où tout le processus est pur et strict, vous devez parfois avoir des effets secondaires. Ainsi, une monade n'est qu'un petit espace qui vous permet de faire des effets secondaires désagréables. Dans cet espace, vous permettez d'échapper au monde pur, allez-y impur, faites votre processus, puis revenez avec une valeur.

Voir 3: Monad comme dans la théorie des catégories

C'est le point de vue que je ne comprends pas complètement. Une monade n'est qu'un fonctor de la même catégorie ou d'une sous-catégorie. Par exemple, vous avez les valeurs int et en tant que sous-catégorie IO INT, qui sont les valeurs int générées après un processus IO.

Ces vues sont-elles correctes? Quel est le plus précis?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
scroll top