将可折叠结构展平为 Monoid
foldMap
将可折叠结构的每个元素映射到 Monoid
,然后将它们组合成单个值。
foldMap
和 foldr
可以相互定义,这意味着 Foldable
的实例只需要给出其中一个的定义。
class Foldable t where
foldMap::Monoid m => (a -> m) -> t a -> m
foldMap f = foldr (mappend . f) mempty
使用 Product
monoid 的示例 :
product :: (Num n, Foldable t) => t n -> n
product = getProduct . foldMap Product