可摺疊的定義
class Foldable t where
{-# MINIMAL foldMap | foldr #-}
foldMap::Monoid m => (a -> m) -> t a -> m
foldMap f = foldr (mappend . f) mempty
foldr :: (a -> b -> b) -> b -> t a -> b
foldr f z t = appEndo (foldMap (Endo #. f) t) z
-- and a number of optional methods
直觀地(雖然不是技術上),Foldable
結構是元素 a
的容器,允許以明確定義的順序訪問它們的元素。foldMap
操作將容器的每個元素對映到 Monoid
並使用 Monoid
結構摺疊它們。