Copyright | (c) Brett Wines 2014 |
---|---|

License | BSD-style |

Maintainer | bgwines@cs.stanford.edu |

Stability | experimental |

Portability | portable |

Safe Haskell | Safe-Inferred |

Language | Haskell98 |

Assorted types and typeclasses

# Documentation

`Zoldable`

is much like `Foldable`

, but with a crucial difference:

foldMap :: (Foldable t, Monoid m) => ( a -> m) -> t a -> m zoldMap :: (Zoldable t, Monoid m) => (t a -> m) -> t a -> m

It is an augmented form -- `foldMap f t`

is `zoldMap (f . g) t`

where `g :: t a -> a`

. With `foldMap`

, you lose information that you have at the time of invocation of `f`

: the `t a`

; the context in which the `a`

is enclosed is discarded. Consider the following situation: you have some tree type, e.g.

data Tree a = Leaf a | Node a (Tree a) (Tree a)

Suppose you want to get a list of all the nodes in the tree. This is just `zoldMap (x -> [x]) tree`

.