-1

我想知道,你说那flatMap是monad的bind方法。bind 方法接受一个将 monad 包含的项目映射到另一个 monad 的函数。这是如何

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

给了我另一个内部的单子f(item)。但是,应用于 List 意味着什么?通过简单的扩展,如果您将每个 List 项目映射到一个 (list) monad,您将获得整个列表列表。为什么bind在应用于列表时会展平结果?

4

1 回答 1

1

就像Optionmonad 的绑定不返回选项的选项一样,List monad 的绑定不返回列表列表。这种连接是 monad 的全部意义——它们不仅仅是函子:

// 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 回答