Copyright | (c) Edward Kmett 2009 |
---|---|

License | BSD-style |

Maintainer | ekmett@gmail.com |

Stability | experimental |

Portability | portable |

Safe Haskell | Safe |

Language | Haskell98 |

A `Generator1`

`c`

is a possibly-specialized container, which contains values of
type `Elem`

`c`

, and which knows how to efficiently apply a `Reducer`

to extract
an answer.

`Generator1`

is to `Generator`

as `Foldable1`

is to `Foldable`

.

## Synopsis

- class Generator c => Generator1 c where
- reduce1 :: (Generator1 c, Reducer (Elem c) m) => c -> m
- mapReduceWith1 :: (Generator1 c, Reducer e m) => (m -> n) -> (Elem c -> e) -> c -> n
- reduceWith1 :: (Generator1 c, Reducer (Elem c) m) => (m -> n) -> c -> n

# Generators

class Generator c => Generator1 c where Source #

minimal definition `mapReduce1`

or `mapTo1`

mapReduce1 :: Reducer e m => (Elem c -> e) -> c -> m Source #

mapTo1 :: Reducer e m => (Elem c -> e) -> m -> c -> m Source #

mapFrom1 :: Reducer e m => (Elem c -> e) -> c -> m -> m Source #

## Instances

Generator1 (NonEmpty e) Source # | |

# Combinators

mapReduceWith1 :: (Generator1 c, Reducer e m) => (m -> n) -> (Elem c -> e) -> c -> n Source #

reduceWith1 :: (Generator1 c, Reducer (Elem c) m) => (m -> n) -> c -> n Source #