dunai-0.4.0.0: Generalised reactive framework supporting classic, arrowized and monadic FRP.

Copyright(c) Ivan Perez and Manuel Bärenz
LicenseSee the LICENSE file in the distribution.
Maintainerivan.perez@keera.co.uk
Stabilityprovisional
Portabilitynon-portable (GHC extensions)
Safe HaskellSafe
LanguageHaskell2010

Data.VectorSpace

Description

Vector space type relation and basic instances. Heavily inspired by Yampa's FRP.Yampa.VectorSpace module.

Synopsis

Documentation

class Num (Groundring v) => RModule v where #

R-modules. A module v over a ring Groundring v is an abelian group with a linear multiplication. The hat ^ denotes the side of an operation on which the vector stands, i.e. a *^ v for v a vector.

A minimal definition should include the type Groundring and the implementations of zeroVector, ^+^, and one of *^ or ^*.

The following laws must be satisfied:

  • v1 ^+^ v2 == v2 ^+^ v1
  • a *^ zeroVector == zeroVector
  • @a *^ (v1 ^+^ v2) == a *^ v1 ^+^ a*^ v2
  • a *^ v == v ^* a
  • negateVector v == (-1) *^ v
  • v1 ^-^ v2 == v1 ^+^ negateVector v2

Minimal complete definition

zeroVector, (^+^)

Associated Types

type Groundring v #

Methods

zeroVector :: v #

(*^) :: Groundring v -> v -> v infixr 6 #

(^*) :: v -> Groundring v -> v #

negateVector :: v -> v #

(^+^) :: v -> v -> v infixl 5 #

(^-^) :: v -> v -> v infixl 5 #

Instances
RModule Double #

R-mobule instance for Doubles.

Instance details

Defined in Data.VectorSpace.Specific

Associated Types

type Groundring Double :: * #

RModule Float #

R-mobule instance for Floatings.

Instance details

Defined in Data.VectorSpace.Specific

Associated Types

type Groundring Float :: * #

RModule Int #

R-mobule instance for Ints.

Instance details

Defined in Data.VectorSpace.Specific

Associated Types

type Groundring Int :: * #

Methods

zeroVector :: Int #

(*^) :: Groundring Int -> Int -> Int #

(^*) :: Int -> Groundring Int -> Int #

negateVector :: Int -> Int #

(^+^) :: Int -> Int -> Int #

(^-^) :: Int -> Int -> Int #

RModule Integer #

R-mobule instance for Integers.

Instance details

Defined in Data.VectorSpace.Specific

Associated Types

type Groundring Integer :: * #

Num a => RModule a #

R-module instance for any number, where '^+^ is + and multiplication is normal multiplication.

Instance details

Defined in Data.VectorSpace.Fractional

Associated Types

type Groundring a :: * #

Methods

zeroVector :: a #

(*^) :: Groundring a -> a -> a #

(^*) :: a -> Groundring a -> a #

negateVector :: a -> a #

(^+^) :: a -> a -> a #

(^-^) :: a -> a -> a #

(Groundring a ~ Groundring b, RModule a, RModule b) => RModule (a, b) #

R-module instance for tuples.

Instance details

Defined in Data.VectorSpace.Tuples

Associated Types

type Groundring (a, b) :: * #

Methods

zeroVector :: (a, b) #

(*^) :: Groundring (a, b) -> (a, b) -> (a, b) #

(^*) :: (a, b) -> Groundring (a, b) -> (a, b) #

negateVector :: (a, b) -> (a, b) #

(^+^) :: (a, b) -> (a, b) -> (a, b) #

(^-^) :: (a, b) -> (a, b) -> (a, b) #

Num a => RModule (a, a, a) #

R-module instance for tuples with 3 elements.

Instance details

Defined in Data.VectorSpace.Tuples

Associated Types

type Groundring (a, a, a) :: * #

Methods

zeroVector :: (a, a, a) #

(*^) :: Groundring (a, a, a) -> (a, a, a) -> (a, a, a) #

(^*) :: (a, a, a) -> Groundring (a, a, a) -> (a, a, a) #

negateVector :: (a, a, a) -> (a, a, a) #

(^+^) :: (a, a, a) -> (a, a, a) -> (a, a, a) #

(^-^) :: (a, a, a) -> (a, a, a) -> (a, a, a) #

(Monad m, RModule v) => RModule (MSF m a v) #

R-module instance for MSFs.

Instance details

Defined in Data.MonadicStreamFunction.Instances.VectorSpace

Associated Types

type Groundring (MSF m a v) :: * #

Methods

zeroVector :: MSF m a v #

(*^) :: Groundring (MSF m a v) -> MSF m a v -> MSF m a v #

(^*) :: MSF m a v -> Groundring (MSF m a v) -> MSF m a v #

negateVector :: MSF m a v -> MSF m a v #

(^+^) :: MSF m a v -> MSF m a v -> MSF m a v #

(^-^) :: MSF m a v -> MSF m a v -> MSF m a v #

Num a => RModule (a, a, a, a) #

R-module instance for tuples with 4 elements.

Instance details

Defined in Data.VectorSpace.Tuples

Associated Types

type Groundring (a, a, a, a) :: * #

Methods

zeroVector :: (a, a, a, a) #

(*^) :: Groundring (a, a, a, a) -> (a, a, a, a) -> (a, a, a, a) #

(^*) :: (a, a, a, a) -> Groundring (a, a, a, a) -> (a, a, a, a) #

negateVector :: (a, a, a, a) -> (a, a, a, a) #

(^+^) :: (a, a, a, a) -> (a, a, a, a) -> (a, a, a, a) #

(^-^) :: (a, a, a, a) -> (a, a, a, a) -> (a, a, a, a) #

Num a => RModule (a, a, a, a, a) #

R-module instance for tuples with 5 elements.

Instance details

Defined in Data.VectorSpace.Tuples

Associated Types

type Groundring (a, a, a, a, a) :: * #

Methods

zeroVector :: (a, a, a, a, a) #

(*^) :: Groundring (a, a, a, a, a) -> (a, a, a, a, a) -> (a, a, a, a, a) #

(^*) :: (a, a, a, a, a) -> Groundring (a, a, a, a, a) -> (a, a, a, a, a) #

negateVector :: (a, a, a, a, a) -> (a, a, a, a, a) #

(^+^) :: (a, a, a, a, a) -> (a, a, a, a, a) -> (a, a, a, a, a) #

(^-^) :: (a, a, a, a, a) -> (a, a, a, a, a) -> (a, a, a, a, a) #

class (Fractional (Groundring v), RModule v) => VectorSpace v where #

A vector space is a module over a field, i.e. a commutative ring with inverses.

It needs to satisfy the axiom v ^ a == (1a) *^ v, which is the default implementation.

Methods

(^/) :: v -> Groundfield v -> v infixl 6 #

Instances
VectorSpace Double #

Vector-space instance for Double.

Instance details

Defined in Data.VectorSpace.Specific

VectorSpace Float #

Vector-space instance for Floatings.

Instance details

Defined in Data.VectorSpace.Specific

Methods

(^/) :: Float -> Groundfield Float -> Float #

Fractional a => VectorSpace a #

Vector-space instance for any fractional, where vectorial division is normal number division.

Instance details

Defined in Data.VectorSpace.Fractional

Methods

(^/) :: a -> Groundfield a -> a #

(Groundfield a ~ Groundfield b, VectorSpace a, VectorSpace b) => VectorSpace (a, b) #

Vector-space instance for tuples.

Instance details

Defined in Data.VectorSpace.Tuples

Methods

(^/) :: (a, b) -> Groundfield (a, b) -> (a, b) #

Fractional a => VectorSpace (a, a, a) #

Vector-space instance for tuples with 3 elements.

Instance details

Defined in Data.VectorSpace.Tuples

Methods

(^/) :: (a, a, a) -> Groundfield (a, a, a) -> (a, a, a) #

(Monad m, VectorSpace v) => VectorSpace (MSF m a v) #

Vector-space instance for MSFs.

Instance details

Defined in Data.MonadicStreamFunction.Instances.VectorSpace

Methods

(^/) :: MSF m a v -> Groundfield (MSF m a v) -> MSF m a v #

Fractional a => VectorSpace (a, a, a, a) #

Vector-space instance for tuples with 4 elements.

Instance details

Defined in Data.VectorSpace.Tuples

Methods

(^/) :: (a, a, a, a) -> Groundfield (a, a, a, a) -> (a, a, a, a) #

Fractional a => VectorSpace (a, a, a, a, a) #

Vector-space instance for tuples with 5 elements.

Instance details

Defined in Data.VectorSpace.Tuples

Methods

(^/) :: (a, a, a, a, a) -> Groundfield (a, a, a, a, a) -> (a, a, a, a, a) #

type family Groundfield v :: * #

The ground ring of a vector space is required to be commutative and to possess inverses. It is then called the "ground field". Commutativity amounts to the law a * b = b * a, and the existence of inverses is given by the requirement of the Fractional type class.

Instances
type Groundfield v # 
Instance details

Defined in Data.VectorSpace

class RModule v => InnerProductSpace v where #

An inner product space is a module with an inner product, i.e. a map dot satisfying

Minimal complete definition

dot

Methods

dot :: v -> v -> Groundfield v infix 6 #

Instances
Num a => InnerProductSpace a #

Inner-product instance for any number.

Instance details

Defined in Data.VectorSpace.Fractional

Methods

dot :: a -> a -> Groundfield a #

(Groundfield a ~ Groundfield b, InnerProductSpace a, InnerProductSpace b) => InnerProductSpace (a, b) #

Inner Product Space instance for tuples.

Instance details

Defined in Data.VectorSpace.Tuples

Methods

dot :: (a, b) -> (a, b) -> Groundfield (a, b) #

Num a => InnerProductSpace (a, a, a) #

Inner Product Space instance for tuples with 3 elements.

Instance details

Defined in Data.VectorSpace.Tuples

Methods

dot :: (a, a, a) -> (a, a, a) -> Groundfield (a, a, a) #

Num a => InnerProductSpace (a, a, a, a) #

Inner Product Space instance for tuples with 4 elements.

Instance details

Defined in Data.VectorSpace.Tuples

Methods

dot :: (a, a, a, a) -> (a, a, a, a) -> Groundfield (a, a, a, a) #

Num a => InnerProductSpace (a, a, a, a, a) #

Inner Product Space instance for tuples with 5 elements.

Instance details

Defined in Data.VectorSpace.Tuples

Methods

dot :: (a, a, a, a, a) -> (a, a, a, a, a) -> Groundfield (a, a, a, a, a) #

class RModule v => NormedSpace v where #

A normed space is a module with a norm, i.e. a function norm satisfying

  • norm (a ^* v) = a ^* norm v
  • norm (v1 ^+^ v2) <= norm v1 ^+^ norm v2 (the "triangle inequality")

A typical example is sqrt (v dot v), for an inner product space.

Minimal complete definition

norm

Methods

norm :: v -> Groundfield v #