2016-06-18 15 views
-1

Ich frage mich, Sie sagen, dass flatMap Monad bind Methode ist. Die bind-Methode verwendet eine Funktion, die das enthaltene Element von monad einer anderen Monade zuordnet. Dies ist, wieWarum reduziert die Bindung die Liste?

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

gibt mir eine andere Monade mit f(item) innen. Aber was bedeutet es für List? Wenn Sie bei der strightforward-Erweiterung jedes Listenelement einer (Listen-) Monade zuordnen, erhalten Sie die gesamte Liste der Listen. Warum glättet bind das Ergebnis, wenn es auf die Liste angewendet wird?

+0

"* zu einem anderen Monad *" sollte lesen "... ordnet das enthaltene Element einem Container der gleichen Monade zu" – Bergi

Antwort

1

Wie die Option der Monade binden keine Option einer Option zurückzukehren, die binden die Liste Monade keine Liste der Listen zurück. Diese Beitritt ist der ganze Sinn der Monaden - sie sind mehr als bloße functors:

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

Im Falle von Listen, dies durch Abflachen sie getan wird.

Verwandte Themen