monoid-extras-0.3.2.2: Various extra monoid-related definitions and utilities

Data.Monoid.Coproduct

Description

The coproduct of two monoids.

Synopsis

# Documentation

data m :+: n Source

`m :+: n` is the coproduct of monoids `m` and `n`. Values of type `m :+: n` consist of alternating lists of `m` and `n` values. The empty list is the identity, and composition is list concatenation, with appropriate combining of adjacent elements when possible.

Instances

 Monoid (:+: m n) The coproduct of two monoids is itself a monoid. Semigroup (:+: m n) (Action m r, Action n r) => Action (:+: m n) r Coproducts act on other things by having each of the components act individually.

inL :: m -> m :+: nSource

Injection from the left monoid into a coproduct.

inR :: n -> m :+: nSource

Injection from the right monoid into a coproduct.

mappendL :: m -> (m :+: n) -> m :+: nSource

Prepend a value from the left monoid.

mappendR :: n -> (m :+: n) -> m :+: nSource

Prepend a value from the right monoid.

killL :: Monoid n => (m :+: n) -> nSource

`killL` takes a value in a coproduct monoid and sends all the values from the left monoid to the identity.

killR :: Monoid m => (m :+: n) -> mSource

`killR` takes a value in a coproduct monoid and sends all the values from the right monoid to the identity.

untangle :: (Action m n, Monoid m, Monoid n) => (m :+: n) -> (m, n)Source

Take a value from a coproduct monoid where the left monoid has an action on the right, and "untangle" it into a pair of values. In particular,

``` m1 <> n1 <> m2 <> n2 <> m3 <> n3 <> ...
```

is sent to

``` (m1 <> m2 <> m3 <> ..., (act m1 n1) <> (act (m1 <> m2) n2) <> (act (m1 <> m2 <> m3) n3) <> ...)
```

That is, before combining `n` values, every `n` value is acted on by all the `m` values to its left.