Safe Haskell | Safe |
---|---|

Language | Haskell2010 |

Typeclasses for Group and Tensor, extending `Monoid`

.

# Documentation

module Data.Monoid

class Monoid a => Group a where Source

A group is a monoid with an invert operation.
Intuition: `><`

is to `<>`

what subtraction is to addition; `invert`

turns a
value into its complement (see Laws below), and corresponds with unary minus
in addition.

Laws:

a >< b == a <> (invert b) a >< mempty == a a >< a == mempty a <> (invert a) == mempty invert mempty == mempty

Nothing

class Group b => Tensor a b where Source

Tensor allows us to define a relationship between two types, the second one forming a Group. The intuition is that the first type models something like a "location", and the second (the group) models the relative distance between two locations. Examples of Tensors include date/time values (point in time) and timespans; positions in a vector space and displacement vectors; pitches and intervals in music.

Tensor provides three operations: `?<>`

("tensor addition"), adding a
"distance" to a "location"; `?><`

("tensor subtraction"), undoing the effect
of adding a "distance" to a "location", and `>?<`

, getting the "distance"
between two "locations".

Laws:

a ?<> (b >?< a) == b a ?<> (x <> y) == a ?<> x ?<> y a ?>< b == a ?<> (invert b) a ?<> (x >< y) == a ?<> x ?>< y