| Portability | portable |
|---|---|
| Stability | experimental |
| Maintainer | libraries@haskell.org |
Data.Monoid
Description
A class for monoids (types with an associative binary operation that has an identity) with various general-purpose instances.
Synopsis
The class of monoids (types with an associative binary operation that has an identity). Instances should satisfy the following laws:
mappend mempty x = x
mappend x mempty = x
mappend x (mappend y z) = mappend (mappend x y) z
mconcat =foldr mappend memptyThe method names refer to the monoid of lists under concatenation, but there are many other instances.
Minimal complete definition:mempty andmappend.
Some types can be viewed as a monoid in more than one way, e.g. both addition and multiplication on numbers. In such cases we often definenewtypes and make those instances ofMonoid, e.g.Sum andProduct.
Methods
Identity ofmappend
An associative operation
Fold a list using the monoid. For most types, the default definition formconcat will be used, but the function is included in the class definition so that an optimized version can be provided for specific types.
Instances
| MonoidOrdering | |
| Monoid () | |
| MonoidAny | |
| MonoidAll | |
| MonoidEvent | |
| Monoid [a] | |
| Monoid a =>Monoid (Maybe a) | Lift a semigroup into |
| Monoid (Last a) | |
| Monoid (First a) | |
| Num a =>Monoid (Product a) | |
| Num a =>Monoid (Sum a) | |
| Monoid (Endo a) | |
| Monoid a =>Monoid (Dual a) | |
| Monoid b =>Monoid (a -> b) | |
| (Monoid a,Monoid b) =>Monoid (a, b) | |
| (Monoid a,Monoid b,Monoid c) =>Monoid (a, b, c) | |
| (Monoid a,Monoid b,Monoid c,Monoid d) =>Monoid (a, b, c, d) | |
| (Monoid a,Monoid b,Monoid c,Monoid d,Monoid e) =>Monoid (a, b, c, d, e) |
The dual of a monoid, obtained by swapping the arguments ofmappend.
The monoid of endomorphisms under composition.
Boolean monoid under conjunction.
Boolean monoid under disjunction.
Monoid under addition.
Monoid under multiplication.
Constructors
| Product | |
Fields
| |
To implementfind orfindLast on anyFoldable:
findLast :: Foldable t => (a -> Bool) -> t a -> Maybe a findLast pred = getLast . foldMap (x -> if pred x then Last (Just x) else Last Nothing)
Much of Data.Map's interface can be implemented with Data.Map.alter. Some of the rest can be implemented with a newalterA function and eitherFirst orLast:
alterA :: (Applicative f, Ord k) => (Maybe a -> f (Maybe a)) -> k -> Map k a -> f (Map k a) instance Monoid a => Applicative ((,) a) -- from Control.Applicative
insertLookupWithKey :: Ord k => (k -> v -> v -> v) -> k -> v -> Map k v -> (Maybe v, Map k v) insertLookupWithKey combine key value = Arrow.first getFirst . alterA doChange key where doChange Nothing = (First Nothing, Just value) doChange (Just oldValue) = (First (Just oldValue), Just (combine key value oldValue))
Maybe monoid returning the leftmost non-Nothing value.
Produced byHaddock version 2.9.2