2016-06-18 9 views
-1

flatMapは、モナドのbindメソッドです。 bindメソッドは、モナドに含まれるアイテムを別のモナドにマップする関数をとる。これはバインドがリストをフラット化するのはなぜですか?

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

は私にf(item)内部で別のモナドを与える方法です。しかし、リストに適用されることは何を意味しますか? strightforward拡張によって、すべてのList項目を(リスト)モナドにマップすると、リストの全リストが得られます。 bindがリストに適用されると結果がフラットになるのはなぜですか?

+0

「*別のモナド*」は「含まれているアイテムを同じモナドのコンテナにマップする」 – Bergi

答えて

1

は、オプションの選択肢を返さないOptionモナドのバインドと同様に、リストモナドのバインドはリストのリストを返しません。に参加このはモナドの全体のポイントである - 彼らは単なるファンクタ以上です:リストの場合

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

、これは、それらを平坦化することによって行われます。

関連する問題