-
Notifications
You must be signed in to change notification settings - Fork 2
Description
Superbes illustrations 😄
Je trouve cependant que voir les monades comme un conteneur + map
+ join
(ou flatMap
/bind
) est un peu bloquant pour la suite. En effet, l'analogie trouve vite ses limites quand on regarge Either
, IO
, Reader
/Writer
et donc State
, et donc aussi les parseurs, les continuations, ou même plus simplement les fonctions (oui, une fonction est aussi une monade).
Un point de vue plus révélateur pour moi est de les voir comme une valeur dans un contexte, le bind
appliquant un calcul à la valeur en tenant compte du contexte (d'où le nom, comme le late binding en objet, etc.). Par exemple, pour Either
, on applique une fonction / effectue un calcul dans un contexte où l'échec est possible; State
, ben... le contexte c'est l'état en question; pour les parseurs, on construit un automate à état/pile, et donc on doit traiter chaque élément dans le contexte de ce qui précède; les continuations capturent leur contexte d'exécution, etc.
Je trouve personnellement que cette manière de voir est plus révélatrice de la nature des monades, et aide mieux à les appréhender.
voilou