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

Maintainer diagrams-discuss@googlegroups.com Safe-Infered

Data.Monoid.Action

Description

Monoid and semigroup actions.

Synopsis

# Documentation

class Action m s whereSource

Type class for monoid (and semigroup) actions, where monoidal values of type `m` "act" on values of another type `s`. Instances are required to satisfy the laws

• `act mempty = id`
• `act (m1 ``mappend`` m2) = act m1 . act m2`

Semigroup instances are required to satisfy the same law but with '()' instead of `mappend`. Additionally, if the type `s` has any algebraic structure, `act m` should be a homomorphism. For example, if `s` is also a monoid we should have ```act m mempty = mempty``` and ```act m (s1 `mappend` s2) = (act m s1) `mappend` (act m s2)```.

By default, `act = const id`, so for a type `M` which should have no action on anything, it suffices to write

``` instance Action M s
```

with no method implementations.

Methods

act :: m -> s -> sSource

Convert a value of type `m` to an action on `s` values.

Instances

 Action () l Action m s => Action (Option m) s `Nothing` acts as the identity; `Just m` acts as `m`. Action (SM a) () Action m n => Action (Split m) n By default, the action of a split monoid is the same as for the underlying monoid, as if the split were removed. (Action a a', Action (SM a) l) => Action (SM a) (Option a', l) (Action (SM a) l2, Action l1 l2) => Action (a, l1) l2 (Action m r, Action n r) => Action (:+: m n) r Coproducts act on other things by having each of the components act individually.