为什么bind会压扁List?

时间:2016-06-18 15:07:39

标签: functional-programming bind monads flatmap

我想知道,你说{}是monad的flatMap方法。 bind方法采用将monad包含的项映射到另一个monad的函数。这就是

bind

给了我另一个内部option.flatMap(item => another option (f(item))) 的monad。但是,它适用于List是什么意思?通过直接扩展,如果将每个List项映射到(list)monad,则可以获得整个列表列表。为什么f(item)在应用于列表时会使结果变平?

1 个答案:

答案 0 :(得分:1)

就像Option monad的 bind 不返回选项的选项一样,List monad的 bind 不会返回列表列表。这个加入是monad的重点 - 它们不仅仅是仿函数:

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

对于列表,可以通过展平它们来完成。