Le 27 mars 2014 01:37, Valentin Robert <valentin.robert.42@gmail.com> a écrit :
Non je ne dirais pas ça.

L'idée générale est "comment peut-on appliquer fonctions en tenant compte d'un certain contexte ?".

Une solution (fournie par Functor) est d'appliquer une fonction pure de tout contexte (a -> b) directement sur un contexte en entrée (c a) :
c a -> (a -> b) -> c b
Dans ce cas, la structure du contexte de sortie est uniquement dépendante de la structure du contexte de l'entrée, jamais de la fonction.

Une solution (fournie par Applicative) est d'appliquer une fonction pure placée dans un contexte (c (a -> b)) sur l'entrée :
c a -> c (a -> b) -> c b
Dans ce cas, la structure du contexte de sortie est déterminée par le contexte de l'entrée et le contexte de la fonction, mais toujours pas par la fonction.

Une solution (fournie par Monad) est d'appliquer une fonciton (a -> c b) qui produit, pour la valeur placée dans le contexte de l'entrée (le a), une autre valeur dans un autre contexte (le (c b)) :
c a -> (a -> c b) -> c b
Dans ce cas, la structure du contexte de sortie peut être influencé par la fonction, qui peut dépendre de la valeur dans le contexte d'entrée.



Je n'utiliserai pas le vocabulaire read/write/drop/create car je ne pense pas que ça aidera à éclaircir les idées. Tout comme je n'utiliserai pas d'analogie, car elles marchent souvent bien pour un exemple et très mal pour un autre. Parler de contexte est déjà à la limite du douteux pour certaines monades...

Si cela n'est pas très clair, ne te tracasse pas trop, et essaie de lire ou écrire quelques programmes applicatifs et monadiques pour certaines monades, puis de lire ou écrire quelques programmes pour des monades génériques, et tu finiras par discerner les motifs sous-jacents.

- Valentin


C'est un peu plus claire, merci.