- Folding with
`Reducer`

s `Applicative`

reduction

- class Monoid m => Reducer c m where
- foldMapReduce :: (Foldable f, Reducer e m) => (a -> e) -> f a -> m
- foldReduce :: (Foldable f, Reducer e m) => f e -> m
- pureUnit :: (Applicative f, Reducer c n) => c -> f n
- returnUnit :: (Monad m, Reducer c n) => c -> m n

# Documentation

class Monoid m => Reducer c m whereSource

This type may be best read infix. A `c `

is a `Reducer`

m`Monoid`

`m`

that maps
values of type `c`

through `unit`

to values of type `m`

. A `c`

-`Reducer`

may also
supply operations which tack-on another `c`

to an existing `Monoid`

`m`

on the left
or right. These specialized reductions may be more efficient in some scenarios
and are used when appropriate by a `Generator`

. The names `cons`

and `snoc`

work
by analogy to the synonymous operations in the list monoid.

This class deliberately avoids functional-dependencies, so that () can be a `c`

-Reducer
for all `c`

, and so many common reducers can work over multiple types, for instance,
First and Last may reduce both `a`

and `Maybe`

`a`

. Since a `Generator`

has a fixed element
type, the input to the reducer is generally known and extracting from the monoid usually
is sufficient to fix the result type. Combinators are available for most scenarios where
this is not the case, and the few remaining cases can be handled by using an explicit
type annotation.

Convert a value into a `Monoid`

Append a value to a `Monoid`

for use in left-to-right reduction

Prepend a value onto a `Monoid`

for use during right-to-left reduction

Reducer Bool All | |

Reducer Bool Any | |

Reducer Char Rope | |

Reducer Word8 Rope | |

Reducer String Rope | |

Reducer c () | |

Reducer ByteString Rope | |

Reducer ByteString ByteString | |

Reducer ByteString ByteString | |

Reducer ByteString Body | |

Reducer ByteString Rope | |

Reducer Chunk Rope | |

Reducer Rope Rope | |

Reducer a (Last a) | |

Reducer a (First a) | |

Num a => Reducer a (Product a) | |

Num a => Reducer a (Sum a) | |

Monoid a => Reducer a (Dual a) | |

Reducer c [c] | |

Measured v a => Reducer a (FingerTree v a) | |

(Reducer c m, Reducer c n) => Reducer c (m, n) | |

(Reducer c m, Reducer c n, Reducer c o) => Reducer c (m, n, o) | |

(Reducer c m, Reducer c n, Reducer c o, Reducer c p) => Reducer c (m, n, o, p) | |

Reducer [Word8] Rope | |

Reducer (Maybe a) (Last a) | |

Reducer (Maybe a) (First a) | |

Reducer (a -> a) (Endo a) |

# Folding with `Reducer`

s

foldMapReduce :: (Foldable f, Reducer e m) => (a -> e) -> f a -> mSource

foldReduce :: (Foldable f, Reducer e m) => f e -> mSource

`Applicative`

reduction

pureUnit :: (Applicative f, Reducer c n) => c -> f nSource

returnUnit :: (Monad m, Reducer c n) => c -> m nSource