semigroups-actions

Semigroups actions http://github.com/ppetr/semigroups-actions/

 Latest on Hackage: 0.1

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

Maintained by

semigroups-actions

In mathematics, an action of a semigroup on a set is an operation that associates each element of the semigroup is with a transformation on the set. See Wikipedia articles on semigroup action and group action.

This package complements and depends on semigroups.

It requires `MultiParamTypeClasses` extension.

Examples

Similarly to semigroups, semigroup (or monoid) actions arise almost everywhere (if you look for them).

Natural numbers acting on monoids

The multiplication monoid of natural numbers acts on any other monoid:

``n `act` x = x <> ... <> x -- x appears n-times``

So `0 `act` x == mempty`, `3 `act` x == x <> x <> x` etc. TODO efficiency

This is expressed by `newtype Repeat` and instance

``instance (Monoid w, Whole n) => SemigroupAct (Product n) (Repeat w) where``

Many different concepts can be expressed using such an action, including

• repeating a list `n`-times (`replicate`),
• compose a function `f` `n`-times, commonly denoted as fⁿ in mathematics:

````haskell (Repeat (Endo fⁿ)) = (Product n) `act` (Repeat (Endo f)) ````

Self-application

Any semigroup (or monoid) can be viewed as acting on itself. In this case, `act` simply becomes `<>`. This is expressed by the `SelfAct` type:

``````newtype SelfAct a = SelfAct a
instance Semigroup g => Semigroup (SelfAct g) where
(SelfAct x) <> (SelfAct y) = SelfAct \$ x <> y``````

Matrices acting on vectors

Matrices with multiplication can be viewed as a group acting on vectors.