data-tensor-0.1.0.0: Tensor and Group typeclasses

Safe HaskellSafe
LanguageHaskell2010

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