Copyright | Copyright (C) 2007 John Goerzen |
---|---|

License | BSD3 |

Maintainer | John Lato <jwlato@gmail.com> |

Stability | provisional |

Portability | portable |

Safe Haskell | Safe |

Language | Haskell98 |

Generic tools for data structures that can be folded.

Written by John Goerzen, jgoerzen@complete.org

- class FoldableLL full item | full -> item where
- fold :: (FoldableLL full item, Monoid item) => full -> item
- foldMap :: (FoldableLL full item, Monoid m) => (item -> m) -> full -> m
- foldM :: (Monad m, FoldableLL full item) => (a -> item -> m a) -> a -> full -> m a
- sequence_ :: (Monad m, FoldableLL full (m item)) => full -> m ()
- mapM_ :: (Monad m, FoldableLL full item) => (item -> m b) -> full -> m ()

# FoldableLL Class

class FoldableLL full item | full -> item where Source #

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 -> a Source #

Left-associative fold

foldl' :: (a -> item -> a) -> a -> full -> a Source #

Strict version of `foldl`

.

foldl1 :: (item -> item -> item) -> full -> item Source #

A variant of `foldl`

with no base case. Requires at least 1
list element.

foldr :: (item -> b -> b) -> b -> full -> b Source #

Right-associative fold

foldr' :: (item -> b -> b) -> b -> full -> b Source #

Strict version of `foldr`

foldr1 :: (item -> item -> item) -> full -> item Source #

Like `foldr`

, but with no starting value

# Utilities

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

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

Map each element to a monoid, then combine the results

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

Monadic version of left fold, similar to `foldM`

.

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

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

A map in monad space, discarding results.