2016-06-18 1 views
-1

Je me demande, vous dites que flatMap est la méthode bind de monad. La méthode bind prend une fonction qui associe l'élément contenu de monad à une autre monade. Voici commentPourquoi bind aplatit la liste?

option.flatMap(item => another option (f(item))) 

me donne une autre monade avec f(item) intérieur. Mais, qu'est-ce que cela signifie pour List? Par extension Strightforward, si vous mappez chaque élément de liste à une monade (liste), vous obtenez la liste complète des listes. Pourquoi bind aplatir le résultat lorsqu'il est appliqué à la liste?

+0

"* à une autre monad *" devrait se lire "... mappe l'élément contenu dans un conteneur de la même monade" – Bergi

Répondre

1

Comme le Option bind ne retourne pas de monade une option d'une option, la liste de monade bind ne renvoie pas une liste de listes. Cette se joindre à est le point de l'ensemble des monades - ils sont plus que de simples foncteurs:

// Functor m 
fmap :: (a -> b) -> m a -> m b 
// Monad m 
bind :: (a -> m b) -> m a -> m b // not m (m b)! 

Dans le cas des listes, cela se fait par les aplatir.