Module

Linear.Vector

Package
purescript-linear
Repository
afcondon/purescript-linear

The Additive typeclass for vector spaces.

This module provides the foundational Additive typeclass that represents vectors as an additive group, along with scalar multiplication operations.

#Additive Source

class Additive :: (Type -> Type) -> Constraintclass (Functor f) <= Additive f  where

A vector space with addition and scalar multiplication.

Laws:

  • add zero v = v (left identity)
  • add v zero = v (right identity)
  • add (add u v) w = add u (add v w) (associativity)
  • add u v = add v u (commutativity)
  • sub v v = zero

Members

  • zero :: forall a. Semiring a => f a

    The zero vector

  • add :: forall a. Semiring a => f a -> f a -> f a

    Vector addition

  • sub :: forall a. Ring a => f a -> f a -> f a

    Vector subtraction

  • lerp :: forall a. Ring a => a -> f a -> f a -> f a

    Linear interpolation: lerp t a b = a + t * (b - a)

    • lerp 0.0 a b = a
    • lerp 1.0 a b = b
  • liftU2 :: forall a. (a -> a -> a) -> f a -> f a -> f a

    Apply a function to non-zero values (union semantics)

  • liftI2 :: forall a b c. (a -> b -> c) -> f a -> f b -> f c

    Apply a function component-wise (intersection semantics)

#(^+^) Source

Operator alias for Linear.Vector.add (left-associative / precedence 6)

#(^-^) Source

Operator alias for Linear.Vector.sub (left-associative / precedence 6)

#scalarR Source

scalarR :: forall f a. Functor f => Semiring a => f a -> a -> f a

Right scalar multiplication

V2 1.0 2.0 ^* 3.0 = V2 3.0 6.0

#(^*) Source

Operator alias for Linear.Vector.scalarR (left-associative / precedence 7)

#scalarL Source

scalarL :: forall f a. Functor f => Semiring a => a -> f a -> f a

Left scalar multiplication

3.0 *^ V2 1.0 2.0 = V2 3.0 6.0

#(*^) Source

Operator alias for Linear.Vector.scalarL (left-associative / precedence 7)

#scalarDiv Source

scalarDiv :: forall f a. Functor f => EuclideanRing a => f a -> a -> f a

Right scalar division

V2 6.0 9.0 ^/ 3.0 = V2 2.0 3.0

#(^/) Source

Operator alias for Linear.Vector.scalarDiv (left-associative / precedence 7)

#negated Source

negated :: forall f a. Functor f => Ring a => f a -> f a

Negate a vector

negated (V2 1.0 (-2.0)) = V2 (-1.0) 2.0

#sumV Source

sumV :: forall f g a. Foldable f => Additive g => Semiring a => f (g a) -> g a

Sum a collection of vectors