rings-0.0.3.1: Ring-like objects.

Safe HaskellSafe
LanguageHaskell2010

Data.Semimodule

Contents

Synopsis

Types

type Free f = (Representable f, Eq (Rep f)) Source #

type Basis b f = (Free f, Rep f ~ b) Source #

type Basis2 b c f g = (Basis b f, Basis c g) Source #

type Basis3 b c d f g h = (Basis b f, Basis c g, Basis d h) Source #

type FreeModule a f = (Free f, Bimodule a a (f a)) Source #

type FreeSemimodule a f = (Free f, Bisemimodule a a (f a)) Source #

Left modules

class (Semiring l, (Additive - Monoid) a) => LeftSemimodule l a where Source #

Left semimodule over a commutative semiring.

All instances must satisfy the following identities:

lscale s (x + y) = lscale s x + lscale s y
lscale (s1 + s2) x = lscale s1 x + lscale s2 x
lscale (s1 * s2) = lscale s1 . lscale s2
lscale zero = zero

When the ring of coefficients s is unital we must additionally have: lscale one = id

See the properties module for a detailed specification of the laws.

Methods

lscale :: l -> a -> a Source #

Left-multiply by a scalar.

Instances
((Additive - Monoid) a, (Additive - Group) a) => LeftSemimodule Integer a Source # 
Instance details

Defined in Data.Semimodule

Methods

lscale :: Integer -> a -> a Source #

(Additive - Monoid) a => LeftSemimodule Natural a Source # 
Instance details

Defined in Data.Semimodule

Methods

lscale :: Natural -> a -> a Source #

(Additive - Monoid) a => LeftSemimodule () a Source # 
Instance details

Defined in Data.Semimodule

Methods

lscale :: () -> a -> a Source #

Semiring l => LeftSemimodule l () Source # 
Instance details

Defined in Data.Semimodule

Methods

lscale :: l -> () -> () Source #

Ring a => LeftSemimodule a (Complex a) Source # 
Instance details

Defined in Data.Semimodule

Methods

lscale :: a -> Complex a -> Complex a Source #

Semiring a => LeftSemimodule a (Ratio a) Source # 
Instance details

Defined in Data.Semimodule

Methods

lscale :: a -> Ratio a -> Ratio a Source #

Semiring a => LeftSemimodule a (V4 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: a -> V4 a -> V4 a Source #

Semiring a => LeftSemimodule a (V3 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: a -> V3 a -> V3 a Source #

Semiring a => LeftSemimodule a (V2 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: a -> V2 a -> V2 a Source #

Semiring a => LeftSemimodule a (V1 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: a -> V1 a -> V1 a Source #

(LeftSemimodule l a, LeftSemimodule l b) => LeftSemimodule l (a, b) Source # 
Instance details

Defined in Data.Semimodule

Methods

lscale :: l -> (a, b) -> (a, b) Source #

LeftSemimodule l a => LeftSemimodule l (e -> a) Source # 
Instance details

Defined in Data.Semimodule

Methods

lscale :: l -> (e -> a) -> e -> a Source #

(LeftSemimodule l a, LeftSemimodule l b, LeftSemimodule l c) => LeftSemimodule l (a, b, c) Source # 
Instance details

Defined in Data.Semimodule

Methods

lscale :: l -> (a, b, c) -> (a, b, c) Source #

Ring a => LeftSemimodule (Complex a) (Complex a) Source # 
Instance details

Defined in Data.Semimodule

Methods

lscale :: Complex a -> Complex a -> Complex a Source #

Semiring a => LeftSemimodule (M44 a) (M44 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M44 a -> M44 a -> M44 a Source #

Semiring a => LeftSemimodule (M44 a) (M43 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M44 a -> M43 a -> M43 a Source #

Semiring a => LeftSemimodule (M44 a) (M42 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M44 a -> M42 a -> M42 a Source #

Semiring a => LeftSemimodule (M44 a) (M41 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M44 a -> M41 a -> M41 a Source #

Semiring a => LeftSemimodule (M33 a) (M34 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M33 a -> M34 a -> M34 a Source #

Semiring a => LeftSemimodule (M33 a) (M33 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M33 a -> M33 a -> M33 a Source #

Semiring a => LeftSemimodule (M33 a) (M32 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M33 a -> M32 a -> M32 a Source #

Semiring a => LeftSemimodule (M33 a) (M31 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M33 a -> M31 a -> M31 a Source #

Semiring a => LeftSemimodule (M22 a) (M24 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M22 a -> M24 a -> M24 a Source #

Semiring a => LeftSemimodule (M22 a) (M23 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M22 a -> M23 a -> M23 a Source #

Semiring a => LeftSemimodule (M22 a) (M22 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M22 a -> M22 a -> M22 a Source #

Semiring a => LeftSemimodule (M22 a) (M21 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M22 a -> M21 a -> M21 a Source #

Semiring a => LeftSemimodule (M11 a) (M14 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M11 a -> M14 a -> M14 a Source #

Semiring a => LeftSemimodule (M11 a) (M13 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M11 a -> M13 a -> M13 a Source #

Semiring a => LeftSemimodule (M11 a) (M12 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M11 a -> M12 a -> M12 a Source #

Semiring a => LeftSemimodule (M11 a) (M11 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

lscale :: M11 a -> M11 a -> M11 a Source #

lscaleDef :: Semiring a => Functor f => a -> f a -> f a Source #

Default definition of lscale for a free module.

negateDef :: LeftModule Integer a => a -> a Source #

Default definition of << for a commutative group.

lerp :: LeftModule r a => r -> a -> a -> a Source #

Linearly interpolate between two vectors.

>>> u = V3 (1 :% 1) (2 :% 1) (3 :% 1) :: V3 Rational
>>> v = V3 (2 :% 1) (4 :% 1) (6 :% 1) :: V3 Rational
>>> r = 1 :% 2 :: Rational
>>> lerp r u v
V3 (6 % 4) (12 % 4) (18 % 4)

(*.) :: LeftSemimodule l a => l -> a -> a infixr 7 Source #

(/.) :: Semifield a => Functor f => a -> f a -> f a infixr 7 Source #

(\.) :: Semifield a => Functor f => a -> f a -> f a infixr 7 Source #

Right modules

class (Semiring r, (Additive - Monoid) a) => RightSemimodule r a where Source #

Right semimodule over a commutative semiring.

The laws for right semimodules are analagous to those of left semimodules.

See the properties module for a detailed specification.

Methods

rscale :: r -> a -> a Source #

Right-multiply by a scalar.

Instances
((Additive - Monoid) a, (Additive - Group) a) => RightSemimodule Integer a Source # 
Instance details

Defined in Data.Semimodule

Methods

rscale :: Integer -> a -> a Source #

(Additive - Monoid) a => RightSemimodule Natural a Source # 
Instance details

Defined in Data.Semimodule

Methods

rscale :: Natural -> a -> a Source #

(Additive - Monoid) a => RightSemimodule () a Source # 
Instance details

Defined in Data.Semimodule

Methods

rscale :: () -> a -> a Source #

Semiring r => RightSemimodule r () Source # 
Instance details

Defined in Data.Semimodule

Methods

rscale :: r -> () -> () Source #

Ring a => RightSemimodule a (Complex a) Source # 
Instance details

Defined in Data.Semimodule

Methods

rscale :: a -> Complex a -> Complex a Source #

Semiring a => RightSemimodule a (Ratio a) Source # 
Instance details

Defined in Data.Semimodule

Methods

rscale :: a -> Ratio a -> Ratio a Source #

Semiring a => RightSemimodule a (V4 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: a -> V4 a -> V4 a Source #

Semiring a => RightSemimodule a (V3 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: a -> V3 a -> V3 a Source #

Semiring a => RightSemimodule a (V2 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: a -> V2 a -> V2 a Source #

Semiring a => RightSemimodule a (V1 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: a -> V1 a -> V1 a Source #

(RightSemimodule r a, RightSemimodule r b) => RightSemimodule r (a, b) Source # 
Instance details

Defined in Data.Semimodule

Methods

rscale :: r -> (a, b) -> (a, b) Source #

RightSemimodule r a => RightSemimodule r (e -> a) Source # 
Instance details

Defined in Data.Semimodule

Methods

rscale :: r -> (e -> a) -> e -> a Source #

(RightSemimodule r a, RightSemimodule r b, RightSemimodule r c) => RightSemimodule r (a, b, c) Source # 
Instance details

Defined in Data.Semimodule

Methods

rscale :: r -> (a, b, c) -> (a, b, c) Source #

Ring a => RightSemimodule (Complex a) (Complex a) Source # 
Instance details

Defined in Data.Semimodule

Methods

rscale :: Complex a -> Complex a -> Complex a Source #

Semiring a => RightSemimodule (M44 a) (M44 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M44 a -> M44 a -> M44 a Source #

Semiring a => RightSemimodule (M44 a) (M34 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M44 a -> M34 a -> M34 a Source #

Semiring a => RightSemimodule (M44 a) (M24 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M44 a -> M24 a -> M24 a Source #

Semiring a => RightSemimodule (M44 a) (M14 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M44 a -> M14 a -> M14 a Source #

Semiring a => RightSemimodule (M33 a) (M43 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M33 a -> M43 a -> M43 a Source #

Semiring a => RightSemimodule (M33 a) (M33 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M33 a -> M33 a -> M33 a Source #

Semiring a => RightSemimodule (M33 a) (M23 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M33 a -> M23 a -> M23 a Source #

Semiring a => RightSemimodule (M33 a) (M13 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M33 a -> M13 a -> M13 a Source #

Semiring a => RightSemimodule (M22 a) (M42 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M22 a -> M42 a -> M42 a Source #

Semiring a => RightSemimodule (M22 a) (M32 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M22 a -> M32 a -> M32 a Source #

Semiring a => RightSemimodule (M22 a) (M22 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M22 a -> M22 a -> M22 a Source #

Semiring a => RightSemimodule (M22 a) (M12 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M22 a -> M12 a -> M12 a Source #

Semiring a => RightSemimodule (M11 a) (M41 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M11 a -> M41 a -> M41 a Source #

Semiring a => RightSemimodule (M11 a) (M31 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M11 a -> M31 a -> M31 a Source #

Semiring a => RightSemimodule (M11 a) (M21 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M11 a -> M21 a -> M21 a Source #

Semiring a => RightSemimodule (M11 a) (M11 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

rscale :: M11 a -> M11 a -> M11 a Source #

rscaleDef :: Semiring a => Functor f => a -> f a -> f a Source #

Default definition of rscale for a free module.

(.*) :: RightSemimodule r a => a -> r -> a infixl 7 Source #

(./) :: Semifield a => Functor f => f a -> a -> f a infixl 7 Source #

(.\) :: Semifield a => Functor f => f a -> a -> f a infixl 7 Source #

Bimodules

type Bimodule l r a = (LeftModule l a, RightModule r a, Bisemimodule l r a) Source #

class (LeftSemimodule l a, RightSemimodule r a) => Bisemimodule l r a where Source #

Bisemimodule over a commutative semiring.

lscale l . rscale r = rscale r . lscale l

Minimal complete definition

Nothing

Methods

discale :: l -> r -> a -> a Source #

Instances
Semiring r => Bisemimodule r r () Source # 
Instance details

Defined in Data.Semimodule

Methods

discale :: r -> r -> () -> () Source #

Ring a => Bisemimodule a a (Complex a) Source # 
Instance details

Defined in Data.Semimodule

Methods

discale :: a -> a -> Complex a -> Complex a Source #

Semiring a => Bisemimodule a a (Ratio a) Source # 
Instance details

Defined in Data.Semimodule

Methods

discale :: a -> a -> Ratio a -> Ratio a Source #

Semiring a => Bisemimodule a a (V4 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: a -> a -> V4 a -> V4 a Source #

Semiring a => Bisemimodule a a (V3 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: a -> a -> V3 a -> V3 a Source #

Semiring a => Bisemimodule a a (V2 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: a -> a -> V2 a -> V2 a Source #

Semiring a => Bisemimodule a a (V1 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: a -> a -> V1 a -> V1 a Source #

(Bisemimodule r r a, Bisemimodule r r b) => Bisemimodule r r (a, b) Source # 
Instance details

Defined in Data.Semimodule

Methods

discale :: r -> r -> (a, b) -> (a, b) Source #

Bisemimodule r r a => Bisemimodule r r (e -> a) Source # 
Instance details

Defined in Data.Semimodule

Methods

discale :: r -> r -> (e -> a) -> e -> a Source #

(Bisemimodule r r a, Bisemimodule r r b, Bisemimodule r r c) => Bisemimodule r r (a, b, c) Source # 
Instance details

Defined in Data.Semimodule

Methods

discale :: r -> r -> (a, b, c) -> (a, b, c) Source #

Ring a => Bisemimodule (Complex a) (Complex a) (Complex a) Source # 
Instance details

Defined in Data.Semimodule

Methods

discale :: Complex a -> Complex a -> Complex a -> Complex a Source #

Semiring a => Bisemimodule (M44 a) (M44 a) (M44 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M44 a -> M44 a -> M44 a -> M44 a Source #

Semiring a => Bisemimodule (M44 a) (M33 a) (M43 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M44 a -> M33 a -> M43 a -> M43 a Source #

Semiring a => Bisemimodule (M44 a) (M22 a) (M42 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M44 a -> M22 a -> M42 a -> M42 a Source #

Semiring a => Bisemimodule (M44 a) (M11 a) (M41 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M44 a -> M11 a -> M41 a -> M41 a Source #

Semiring a => Bisemimodule (M33 a) (M44 a) (M34 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M33 a -> M44 a -> M34 a -> M34 a Source #

Semiring a => Bisemimodule (M33 a) (M33 a) (M33 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M33 a -> M33 a -> M33 a -> M33 a Source #

Semiring a => Bisemimodule (M33 a) (M22 a) (M32 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M33 a -> M22 a -> M32 a -> M32 a Source #

Semiring a => Bisemimodule (M33 a) (M11 a) (M31 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M33 a -> M11 a -> M31 a -> M31 a Source #

Semiring a => Bisemimodule (M22 a) (M44 a) (M24 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M22 a -> M44 a -> M24 a -> M24 a Source #

Semiring a => Bisemimodule (M22 a) (M33 a) (M23 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M22 a -> M33 a -> M23 a -> M23 a Source #

Semiring a => Bisemimodule (M22 a) (M22 a) (M22 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M22 a -> M22 a -> M22 a -> M22 a Source #

Semiring a => Bisemimodule (M22 a) (M11 a) (M21 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M22 a -> M11 a -> M21 a -> M21 a Source #

Semiring a => Bisemimodule (M11 a) (M44 a) (M14 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M11 a -> M44 a -> M14 a -> M14 a Source #

Semiring a => Bisemimodule (M11 a) (M33 a) (M13 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M11 a -> M33 a -> M13 a -> M13 a Source #

Semiring a => Bisemimodule (M11 a) (M22 a) (M12 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M11 a -> M22 a -> M12 a -> M12 a Source #

Semiring a => Bisemimodule (M11 a) (M11 a) (M11 a) Source # 
Instance details

Defined in Data.Semimodule.Free

Methods

discale :: M11 a -> M11 a -> M11 a -> M11 a Source #