ListLike- Generic support for list-like structures

MaintainerJohn Lato <>
Safe HaskellSafe-Inferred




Generic tools for data structures that can be folded.

Written by John Goerzen,


FoldableLL Class

class FoldableLL full item | full -> item whereSource

This is the primary class for structures that are to be considered foldable. A minimum complete definition provides foldl and foldr.

Instances of FoldableLL can be folded, and can be many and varied.

These functions are used heavily in Data.ListLike.


foldl :: (a -> item -> a) -> a -> full -> aSource

Left-associative fold

foldl' :: (a -> item -> a) -> a -> full -> aSource

Strict version of foldl.

foldl1 :: (item -> item -> item) -> full -> itemSource

A variant of foldl with no base case. Requires at least 1 list element.

foldr :: (item -> b -> b) -> b -> full -> bSource

Right-associative fold

foldr' :: (item -> b -> b) -> b -> full -> bSource

Strict version of foldr

foldr1 :: (item -> item -> item) -> full -> itemSource

Like foldr, but with no starting value


fold :: (FoldableLL full item, Monoid item) => full -> itemSource

Combine the elements of a structure using a monoid. fold = foldMap id

foldMap :: (FoldableLL full item, Monoid m) => (item -> m) -> full -> mSource

Map each element to a monoid, then combine the results

foldM :: (Monad m, FoldableLL full item) => (a -> item -> m a) -> a -> full -> m aSource

Monadic version of left fold, similar to foldM.

sequence_ :: (Monad m, FoldableLL full (m item)) => full -> m ()Source

Evaluate each action, ignoring the results. Same as mapM_ id.

mapM_ :: (Monad m, FoldableLL full item) => (item -> m b) -> full -> m ()Source

A map in monad space, discarding results.