将可折叠结构展平为 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