-1

flatMapそれがモナドのbind方法だとおっしゃるのかしら。bind メソッドは、モナドに含まれる項目を別のモナドにマップする関数を取ります。こうやって

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

f(item)内部を持つ別のモナドを私に与えます。しかし、リストに適用されるとはどういう意味ですか? すべての List 項目を (リスト) モナドにマッピングすると、リスト全体のリストが得られます。bindリストに適用すると結果が平坦化されるのはなぜですか?

4

1 に答える 1

1

Optionモナドのバインドがオプションのオプションを返さないのと同様に、List モナドのバインドはリストのリストを返しません。この結合がモナドの要点です - モナドは単なる関手以上のものです:

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

リストの場合、これはそれらを平坦化することによって行われます。

于 2016-06-18T18:07:19.723 に答える