reducers-3.12.2: Semigroups, specialized containers and a general map/reduce framework

Copyright(c) Edward Kmett 2009
LicenseBSD-style
Maintainerekmett@gmail.com
Stabilityexperimental
Portabilitynon-portable (type families, MPTCs)
Safe HaskellSafe
LanguageHaskell98

Data.Generator.Combinators

Contents

Description

Utilities for working with Monoids that conflict with names from the Prelude, Data.Foldable, Control.Monad or elsewhere. Intended to be imported qualified.

import Data.Generator.Combinators as Generator

Synopsis

Monadic Reduction

mapM_ :: (Generator c, Monad m) => (Elem c -> m b) -> c -> m () Source #

Efficiently mapReduce a Generator using the Action monoid. A specialized version of its namesake from Data.Foldable and Control.Monad

   mapReduceWith getAction

forM_ :: (Generator c, Monad m) => c -> (Elem c -> m b) -> m () Source #

Convenience function as found in Data.Foldable and Control.Monad

    flip mapM_

msum :: (Generator c, MonadPlus m, m a ~ Elem c) => c -> m a Source #

The sum of a collection of actions, generalizing concat

    reduceWith getMonadSum

Applicative Reduction

traverse_ :: (Generator c, Applicative f) => (Elem c -> f b) -> c -> f () Source #

Efficiently mapReduce a Generator using the Traversal monoid. A specialized version of its namesake from Data.Foldable

    mapReduce getTraversal

for_ :: (Generator c, Applicative f) => c -> (Elem c -> f b) -> f () Source #

Convenience function as found in Data.Foldable

    flip traverse_

asum :: (Generator c, Alternative f, f a ~ Elem c) => c -> f a Source #

The sum of a collection of actions, generalizing concat

   reduceWith getAlt

Logical Reduction

and :: (Generator c, Elem c ~ Bool) => c -> Bool Source #

Efficiently reduce a Generator that contains values of type Bool

    reduceWith getAll

or :: (Generator c, Elem c ~ Bool) => c -> Bool Source #

Efficiently reduce a Generator that contains values of type Bool

    reduceWith getAny

any :: Generator c => (Elem c -> Bool) -> c -> Bool Source #

Efficiently mapReduce any Generator checking to see if any of its values match the supplied predicate

    mapReduceWith getAny

all :: Generator c => (Elem c -> Bool) -> c -> Bool Source #

Efficiently mapReduce any Generator checking to see if all of its values match the supplied predicate

    mapReduceWith getAll

Monoidal Reduction

foldMap :: (Monoid m, Generator c) => (Elem c -> m) -> c -> m Source #

Efficiently mapReduce a Generator using the WrappedMonoid monoid. A specialized version of its namesake from Data.Foldable

    mapReduceWith unwrapMonoid

fold :: (Monoid m, Generator c, Elem c ~ m) => c -> m Source #

Efficiently reduce a Generator using the WrappedMonoid monoid. A specialized version of its namesake from Data.Foldable

    reduceWith unwrapMonoid

toList :: Generator c => c -> [Elem c] Source #

Convert any Generator to a list of its contents. Specialization of reduce

List-Like Reduction

concatMap :: Generator c => (Elem c -> [b]) -> c -> [b] Source #

Type specialization of "foldMap" above

elem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Bool Source #

Check to see if any member of the Generator matches the supplied value

filter :: (Generator c, Reducer (Elem c) m, Monoid m) => (Elem c -> Bool) -> c -> m Source #

Efficiently mapReduce a subset of the elements in a Generator

filterWith :: (Generator c, Reducer (Elem c) m, Monoid m) => (m -> n) -> (Elem c -> Bool) -> c -> n Source #

Allows idiomatic specialization of filter by proving a function that will be used to transform the output

sum :: (Generator c, Num (Elem c)) => c -> Elem c Source #

Efficiently sum over the members of any Generator

    reduceWith getSum

product :: (Generator c, Num (Elem c)) => c -> Elem c Source #

Efficiently take the product of every member of a Generator

    reduceWith getProduct

notElem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Bool Source #

Check to make sure that the supplied value is not a member of the Generator