-- | Writing 'Foldable' instances for non-regular (AKA, nested) types in the -- natural manner leads to full `Foldable` dictionaries being constructed on -- each recursive call. This is pretty inefficient. It's better to construct -- exactly what we need instead. module Data.PQueue.Internals.Foldable ( Foldr (..) , Foldl (..) , FoldMap (..) , Foldl' (..) ) where class Foldr t where foldr_ :: (a -> b -> b) -> b -> t a -> b class Foldl t where foldl_ :: (b -> a -> b) -> b -> t a -> b class FoldMap t where foldMap_ :: Monoid m => (a -> m) -> t a -> m class Foldl' t where foldl'_ :: (b -> a -> b) -> b -> t a -> b