Copyright | (c) Edward Kmett 2009 |
---|---|
License | BSD3 |
Maintainer | ekmett@gmail.com |
Stability | experimental |
Portability | non-portable (MPTCs) |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Data.Semigroup.Reducer
Description
A c
-Reducer
is a Semigroup
with a canonical mapping from c
to the Semigroup.
Synopsis
- class Semigroup m => Reducer c m where
- foldMapReduce :: (Foldable f, Monoid m, Reducer e m) => (a -> e) -> f a -> m
- foldMapReduce1 :: (Foldable1 f, Reducer e m) => (a -> e) -> f a -> m
- foldReduce :: (Foldable f, Monoid m, Reducer e m) => f e -> m
- foldReduce1 :: (Foldable1 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
- newtype Count = Count {
- getCount :: Int
Documentation
class Semigroup m => Reducer c m where Source #
This type may be best read infix. A c
is a Reducer
mSemigroup
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.
Minimal definition: unit
Minimal complete definition
Methods
Convert a value into a Semigroup
Append a value to a Semigroup
for use in left-to-right reduction
Prepend a value onto a Semigroup
for use during right-to-left reduction
Instances
Reducer Bool All Source # | |
Reducer Bool Any Source # | |
Reducer Int IntSet Source # | |
Reducer a Count Source # | |
Reducer c () Source # | |
Reducer a (First a) Source # | |
Reducer a (Last a) Source # | |
Ord a => Reducer a (Max a) Source # | |
Ord a => Reducer a (Min a) Source # | |
Semigroup a => Reducer a (Dual a) Source # | |
Num a => Reducer a (Product a) Source # | |
Num a => Reducer a (Sum a) Source # | |
Reducer a (Seq a) Source # | |
Ord a => Reducer a (Set a) Source # | |
Reducer c [c] Source # | |
HasUnion f => Reducer f (Union f) Source # | |
Monoid m => Reducer m (WrappedMonoid m) Source # | |
Semigroup m => Reducer m (Self m) Source # | |
Measured v a => Reducer a (FingerTree v a) Source # | |
(Reducer c m, Reducer c n) => Reducer c (m, n) Source # | |
(Reducer c m, Reducer c n, Reducer c o) => Reducer c (m, n, o) Source # | |
(Reducer c m, Reducer c n, Reducer c o, Reducer c p) => Reducer c (m, n, o, p) Source # | |
Reducer (Maybe a) (First a) Source # | |
Reducer (Maybe a) (Last a) Source # | |
Applicative f => Reducer (f a) (Traversal f) Source # | |
Apply f => Reducer (f a) (Trav f) Source # | |
Monad f => Reducer (f a) (Action f) Source # | |
Alt f => Reducer (f a) (Alter f a) Source # | |
Alternative f => Reducer (f a) (Alternate f a) Source # | |
MonadPlus f => Reducer (f a) (MonadSum f a) Source # | |
(Applicative f, Reducer c m) => Reducer (f c) (Ap f m) Source # | |
(Apply f, Reducer c m) => Reducer (f c) (App f m) Source # | |
(Monad f, Reducer c m) => Reducer (f c) (Mon f m) Source # | |
(HasUnionWith f, Semigroup m, Monoid m) => Reducer (f m) (UnionWith f m) Source # | |
Reducer c m => Reducer (WithReducer m c) m Source # | |
Defined in Data.Semigroup.Reducer.With Methods unit :: WithReducer m c -> m Source # snoc :: m -> WithReducer m c -> m Source # cons :: WithReducer m c -> m -> m Source # | |
Reducer (Int, v) (IntMap v) Source # | |
Reducer (a -> a) (Endo a) Source # | |
Ord k => Reducer (k, v) (Map k v) Source # | |
(Eq k, Hashable k) => Reducer (k, v) (HashMap k v) Source # | |
foldMapReduce :: (Foldable f, Monoid m, Reducer e m) => (a -> e) -> f a -> m Source #
Apply a Reducer
to a Foldable
container, after mapping the contents into a suitable form for reduction.
foldMapReduce1 :: (Foldable1 f, Reducer e m) => (a -> e) -> f a -> m Source #
foldReduce :: (Foldable f, Monoid m, Reducer e m) => f e -> m Source #
foldReduce1 :: (Foldable1 f, Reducer e m) => f e -> m Source #
returnUnit :: (Monad m, Reducer c n) => c -> m n Source #
Instances
Data Count Source # | |
Defined in Data.Semigroup.Reducer Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Count -> c Count gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Count dataTypeOf :: Count -> DataType dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Count) dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Count) gmapT :: (forall b. Data b => b -> b) -> Count -> Count gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Count -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Count -> r gmapQ :: (forall d. Data d => d -> u) -> Count -> [u] gmapQi :: Int -> (forall d. Data d => d -> u) -> Count -> u gmapM :: Monad m => (forall d. Data d => d -> m d) -> Count -> m Count gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Count -> m Count gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Count -> m Count | |
Monoid Count Source # | |
Semigroup Count Source # | |
Read Count Source # | |
Defined in Data.Semigroup.Reducer | |
Show Count Source # | |
Eq Count Source # | |
Ord Count Source # | |
Hashable Count Source # | |
Defined in Data.Semigroup.Reducer | |
Reducer a Count Source # | |