Copyright | (c) 2011-2015 diagrams-core team (see LICENSE) |
---|---|
License | BSD-style (see LICENSE) |
Maintainer | diagrams-discuss@googlegroups.com |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
The coproduct of two monoids.
Documentation
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
(Show m, Show n) => Show (m :+: n) Source # | |
Semigroup (m :+: n) Source # | |
Monoid (m :+: n) Source # | The coproduct of two monoids is itself a monoid. |
(Action m r, Action n r) => Action (m :+: n) r Source # | Coproducts act on other things by having each of the components act individually. |
Defined in Data.Monoid.Coproduct |
killL :: Monoid n => (m :+: n) -> n Source #
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) -> m Source #
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.