我想知道,你说{}
是monad的flatMap
方法。 bind方法采用将monad包含的项映射到另一个monad的函数。这就是
bind
给了我另一个内部option.flatMap(item => another option (f(item)))
的monad。但是,它适用于List是什么意思?通过直接扩展,如果将每个List项映射到(list)monad,则可以获得整个列表列表。为什么f(item)
在应用于列表时会使结果变平?
答案 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)!
对于列表,可以通过展平它们来完成。