data-tensor-0.1.0.0: Tensor and Group typeclasses

Data.Tensor

Description

Typeclasses for Group and Tensor, extending `Monoid`.

Synopsis

# Documentation

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```

Minimal complete definition

Nothing

Methods

(><) :: a -> a -> a infixl 6 Source

Dual to `<>`.

invert :: a -> a Source

"Negation": convert an operand into its dual.

Instances

 Num a => Group (Sum a) Source

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```

Minimal complete definition

Methods

(?<>) :: a -> b -> a infixl 6 Source

(?><) :: a -> b -> a infixl 6 Source

(>?<) :: a -> a -> b infixl 6 Source

Instances

 Group a => Tensor a a Source All groups trivially form tensors with themselves