Vec-0.9.2: Fixed-length lists and low-dimensional linear algebra.Source codeContentsIndex
Data.Vec.Base
Contents
Vector Types
List-like functions
Matrix Types
Synopsis
data a :. b = !a :. !b
class ShowVec v where
showVec :: v -> String
type Vec2 a = a :. (a :. ())
type Vec3 a = a :. Vec2 a
type Vec4 a = a :. Vec3 a
type Vec5 a = a :. Vec4 a
type Vec6 a = a :. Vec5 a
type Vec7 a = a :. Vec6 a
type Vec8 a = a :. Vec7 a
type Vec9 a = a :. Vec8 a
type Vec10 a = a :. Vec9 a
type Vec11 a = a :. Vec10 a
type Vec12 a = a :. Vec11 a
type Vec13 a = a :. Vec12 a
type Vec14 a = a :. Vec13 a
type Vec15 a = a :. Vec14 a
type Vec16 a = a :. Vec15 a
type Vec17 a = a :. Vec16 a
type Vec18 a = a :. Vec17 a
type Vec19 a = a :. Vec18 a
class Vec n a v | n a -> v, v -> n a where
mkVec :: n -> a -> v
fromList :: [a] -> v
getElem :: Int -> v -> a
setElem :: Int -> a -> v -> v
vec :: Vec n a v => a -> v
class Access n a v | v -> a where
get :: n -> v -> a
set :: n -> a -> v -> v
class Head v a | v -> a where
head :: v -> a
class Tail v v_ | v -> v_ where
tail :: v -> v_
class Map a b u v | u -> a, v -> b, b u -> v, a v -> u where
map :: (a -> b) -> u -> v
class ZipWith a b c u v w | u -> a, v -> b, w -> c, u v c -> w where
zipWith :: (a -> b -> c) -> u -> v -> w
class Fold a v | v -> a where
fold :: (a -> a -> a) -> v -> a
foldl :: (b -> a -> b) -> b -> v -> b
foldr :: (a -> b -> b) -> b -> v -> b
reverse :: Reverse' () v v' => v -> v'
class Reverse' p v v' | p v -> v' where
reverse' :: p -> v -> v'
class Append v1 v2 v3 | v1 v2 -> v3, v1 v3 -> v2 where
append :: v1 -> v2 -> v3
class Take n v v' | n v -> v' where
take :: n -> v -> v'
class Drop n v v' | n v -> v' where
drop :: n -> v -> v'
class Last v a | v -> a where
last :: v -> a
class Snoc v a v' | v a -> v', v' -> v a, v -> a where
snoc :: v -> a -> v'
class Length v n | v -> n where
length :: v -> Int
sum :: (Fold a v, Num a) => v -> a
product :: (Fold a v, Num a) => v -> a
maximum :: (Fold a v, Ord a) => v -> a
minimum :: (Fold a v, Ord a) => v -> a
toList :: Fold a v => v -> [a]
type Mat22 a = Vec2 (Vec2 a)
type Mat23 a = Vec2 (Vec3 a)
type Mat24 a = Vec2 (Vec4 a)
type Mat32 a = Vec3 (Vec2 a)
type Mat33 a = Vec3 (Vec3 a)
type Mat34 a = Vec3 (Vec4 a)
type Mat35 a = Vec3 (Vec5 a)
type Mat36 a = Vec3 (Vec6 a)
type Mat42 a = Vec4 (Vec2 a)
type Mat43 a = Vec4 (Vec3 a)
type Mat44 a = Vec4 (Vec4 a)
type Mat45 a = Vec4 (Vec5 a)
type Mat46 a = Vec4 (Vec6 a)
type Mat47 a = Vec4 (Vec7 a)
type Mat48 a = Vec4 (Vec8 a)
matToLists :: (Fold a v, Fold v m) => m -> [[a]]
matToList :: (Fold a v, Fold v m) => m -> [a]
matFromLists :: (Vec j a v, Vec i v m) => [[a]] -> m
matFromList :: forall i j v m a. (Vec i v m, Vec j a v, Nat i) => [a] -> m
Documentation
data a :. b Source
The vector constructor. (:.) for vectors is like (:) for lists, and () takes the place of []. (The list of instances here is not meant to be readable.)
Constructors
!a :. !b
show/hide Instances
ZipWith a b c (a' :. u) (b' :. v) (c' :. w) => ZipWith a b c (a :. (a' :. u)) (b :. (b' :. v)) (c :. (c' :. w))
ZipWith a b c (a :. (a :. as)) (b :. ()) (c :. ())
ZipWith a b c (a :. ()) (b :. (b :. bs)) (c :. ())
ZipWith a b c (a :. ()) (b :. ()) (c :. ())
Snoc () a (a :. ())
Access N0 a (a :. v)
Vec N1 a (a :. ())
Alternating N1 a (a :. ())
(Access n a r, Append p (a :. ()) p', GetDiagonal' (Succ n) p' (r :. m) v) => GetDiagonal' n p (r :. (r :. m)) v
Map a b (a' :. u) (b' :. v) => Map a b (a :. (a' :. u)) (b :. (b' :. v))
Map a b (a :. ()) (b :. ())
(Append p (a :. v) x, Append p (a :. ()) y, ReplConsec' a y v z) => ReplConsec' a p (a :. v) (x :. z)
(Access n a r, Append p (a :. ()) (a :. p)) => GetDiagonal' n p (r :. ()) (a :. p)
Fold a (a' :. u) => Fold a (a :. (a' :. u))
Fold a (a :. ())
(Fractional a, Map (a :. r) r ((a :. r) :. rs) rs_, Map r (a :. r) rs_ ((a :. r) :. rs), Pivot a ((a :. r) :. ((a :. r) :. rs)), GaussElim a rs_) => GaussElim a ((a :. r) :. ((a :. r) :. rs))
(Num a, Pivot a (r :. ())) => GaussElim a (r :. ())
(Fractional a, NearZero a, Pivot1 a rs, Tail (a :. r) r, Map (a :. r) r ((a :. r) :. rs) (r :. rs'), Map r (a :. r) (r :. rs') ((a :. r) :. rs), Pivot1 a ((a :. r) :. rs), Pivot a (r :. rs')) => Pivot a ((a :. r) :. rs)
Pivot a (() :. v)
(Fractional a, NearZero a, Map a a (a :. r) (a :. r), ZipWith a a a (a :. r) (a :. r) (a :. r), Map (a :. r) (a :. r) ((a :. r) :. rs) ((a :. r) :. rs), Pivot1 a ((a :. r) :. rs)) => Pivot1 a ((a :. r) :. ((a :. r) :. rs))
(Fractional a, NearZero a, Map a a (a :. r) (a :. r)) => Pivot1 a ((a :. (a :. r)) :. ())
(Fractional a, NearZero a) => Pivot1 a ((a :. ()) :. ())
(Num a, Num (a :. (a :. (a :. v))), Fold a (a :. (a :. (a :. v))), Alternating (Succ (Succ (Succ n))) a (a :. (a :. (a :. v))), DropConsec (a :. (a :. (a :. v))) vv, Map (a :. (a :. (a :. v))) vv ((a :. (a :. (a :. v))) :. ((a :. (a :. (a :. v))) :. m)) vmt, Transpose vmt vm, Map ((a :. (a :. v)) :. ((a :. (a :. v)) :. m_)) a vm (a :. (a :. (a :. v))), Det' a ((a :. (a :. v)) :. ((a :. (a :. v)) :. m_)), Vec (Succ (Succ (Succ n))) a (a :. (a :. (a :. v))), Vec (Succ (Succ (Succ n))) (a :. (a :. (a :. v))) ((a :. (a :. (a :. v))) :. ((a :. (a :. (a :. v))) :. ((a :. (a :. (a :. v))) :. m)))) => Det' a ((a :. (a :. (a :. v))) :. ((a :. (a :. (a :. v))) :. ((a :. (a :. (a :. v))) :. m)))
Num a => Det' a ((a :. (a :. ())) :. ((a :. (a :. ())) :. ()))
Reverse' (a :. p) v v' => Reverse' p (a :. v) v'
(Append p (a :. v) x, Append p (a :. ()) y, DropConsec' y (a :. v) z) => DropConsec' p (a :. (a :. v)) (x :. z)
DropConsec' p (a :. ()) (p :. ())
(SetDiagonal' (Succ n) v m, Access n a r) => SetDiagonal' n (a :. v) (r :. m)
PackedVec (Vec4 Double)
PackedVec (Vec4 Float)
PackedVec (Vec4 Int)
PackedVec (Vec3 Double)
PackedVec (Vec3 Float)
PackedVec (Vec3 Int)
PackedVec (Vec2 Double)
PackedVec (Vec2 Float)
PackedVec (Vec2 Int)
Access n a v => Access (Succ n) a (a :. v)
Vec (Succ n) a (a' :. v) => Vec (Succ (Succ n)) a (a :. (a' :. v))
(Num a, Alternating n a (a :. v)) => Alternating (Succ n) a (a :. (a :. v))
Drop n (a :. v) v' => Drop (Succ n) (a :. (a :. v)) v'
Take n v v' => Take (Succ n) (a :. v) (a :. v')
(Eq a, Eq b) => Eq (a :. b)
(Fractional a, Ord (a :. u), ZipWith a a a (a :. u) (a :. u) (a :. u), Map a a (a :. u) (a :. u), Vec (Succ l) a (a :. u), Show (a :. u)) => Fractional (a :. u)
(Eq (a :. u), Show (a :. u), Num a, Map a a (a :. u) (a :. u), ZipWith a a a (a :. u) (a :. u) (a :. u), Vec (Succ l) a (a :. u)) => Num (a :. u)
(Ord a, Ord b) => Ord (a :. b)
(Read a, Read b) => Read (a :. b)
(Show a, ShowVec v) => Show (a :. v)
(Vec (Succ (Succ n)) a (a :. (a :. v)), Storable a, Storable (a :. v)) => Storable (a :. (a :. v))
Storable a => Storable (a :. ())
(Length (a :. v) (Succ n), Arbitrary a', Arbitrary (a :. v)) => Arbitrary (a' :. (a :. v))
Arbitrary a => Arbitrary (a :. ())
(Show a, ShowVec v) => ShowVec (a :. v)
(Map (a :. r) r ((a :. r) :. rs) rs_, Map r (a :. r) rs_ ((a :. r) :. rs), Fold ((,) a (a :. r)) aas, ZipWith a a a (a :. r) (a :. r) (a :. r), Map a a (a :. r) (a :. r), ZipWith a (a :. r) ((,) a (a :. r)) r ((a :. r) :. rs) aas, Num a, BackSubstitute' rs_) => BackSubstitute' ((a :. r) :. ((a :. r) :. rs))
BackSubstitute' ((a :. r) :. ())
(Map (a :. r) r ((a :. r) :. rs) rs_, Map r (a :. r) rs_ ((a :. r) :. rs), Fold ((,) a (a :. r)) aas, ZipWith a a a (a :. r) (a :. r) (a :. r), Map a a (a :. r) (a :. r), ZipWith a (a :. r) ((,) a (a :. r)) r ((a :. r) :. rs) aas, Num a, NearZero a, BackSubstitute rs_) => BackSubstitute ((a :. r) :. ((a :. r) :. rs))
BackSubstitute ((a :. r) :. ())
Last (a' :. v) a => Last (a :. (a' :. v)) a
Last (a :. ()) a
Tail (a :. as) as
Head (a :. as) a
Transpose' vs vs' => Transpose' (() :. vs) vs'
Snoc v a (a :. v) => Snoc (a :. v) a (a :. (a :. v))
Append (a' :. v1) v2 v3 => Append (a :. (a' :. v1)) v2 (a :. v3)
Append (a :. ()) v (a :. v)
Length v n => Length (a :. v) (Succ n)
(Head xss_h xss_hh, Map xss_h xss_hh (xss_h :. xss_t) xs', Tail xss_h xss_ht, Map xss_h xss_ht (xss_h :. xss_t) xss_, Transpose' (xs :. xss_) xss') => Transpose' ((x :. xs) :. (xss_h :. xss_t)) ((x :. xs') :. xss')
Transpose' ((x :. ()) :. ()) ((x :. ()) :. ())
(Vec (Succ n) s (s :. ra), Vec (Succ m) (s :. ra) ((s :. ra) :. a), Vec (Succ m) s (s :. rb), Vec (Succ n) (s :. rb) ((s :. rb) :. b), Transpose' ((s :. ra) :. a) ((s :. rb) :. b)) => Transpose ((s :. ra) :. a) ((s :. rb) :. b)
class ShowVec v whereSource
Helper to keep parentheses at bay. Just use show as usual.
Methods
showVec :: v -> StringSource
show/hide Instances
ShowVec ()
(Show a, ShowVec v) => ShowVec (a :. v)
Vector Types
type Vec2 a = a :. (a :. ())Source
type Vec3 a = a :. Vec2 aSource
type Vec4 a = a :. Vec3 aSource
type Vec5 a = a :. Vec4 aSource
type Vec6 a = a :. Vec5 aSource
type Vec7 a = a :. Vec6 aSource
type Vec8 a = a :. Vec7 aSource
type Vec9 a = a :. Vec8 aSource
type Vec10 a = a :. Vec9 aSource
type Vec11 a = a :. Vec10 aSource
type Vec12 a = a :. Vec11 aSource
type Vec13 a = a :. Vec12 aSource
type Vec14 a = a :. Vec13 aSource
type Vec15 a = a :. Vec14 aSource
type Vec16 a = a :. Vec15 aSource
type Vec17 a = a :. Vec16 aSource
type Vec18 a = a :. Vec17 aSource
type Vec19 a = a :. Vec18 aSource
class Vec n a v | n a -> v, v -> n a whereSource
The type constraint Vec n a v infers the vector type v from the length n, a type-level natural, and underlying component type a. So x :: Vec N4 a v => v declares x to be a 4-vector of as.
Methods
mkVec :: n -> a -> vSource
Make a uniform vector of a given length. n is a type-level natural. Use vec when the length can be inferred.
fromList :: [a] -> vSource
turn a list into a vector of inferred length
getElem :: Int -> v -> aSource
get a vector element, which one is determined at runtime
setElem :: Int -> a -> v -> vSource
set a vector element, which one is determined at runtime
show/hide Instances
Vec N1 a (a :. ())
Vec N1 a (a :. ())
Vec (Succ n) a (a' :. v) => Vec (Succ (Succ n)) a (a :. (a' :. v))
Vec (Succ n) a (a' :. v) => Vec (Succ (Succ n)) a (a :. (a' :. v))
vec :: Vec n a v => a -> vSource
Make a uniform vector. The length is inferred.
class Access n a v | v -> a whereSource
get or set a vector element, known at compile time. Use the Nat types to access vector components. For instance, get n0 gets the x component, set n2 44 sets the z component to 44.
Methods
get :: n -> v -> aSource
set :: n -> a -> v -> vSource
show/hide Instances
Access N0 a (a :. v)
Access N0 a (a :. v)
Access n a v => Access (Succ n) a (a :. v)
Access n a v => Access (Succ n) a (a :. v)
List-like functions
class Head v a | v -> a whereSource
The first element.
Methods
head :: v -> aSource
show/hide Instances
(Head v h, PackedVec v) => Head (Packed v) h
Head (a :. as) a
class Tail v v_ | v -> v_ whereSource
All but the first element.
Methods
tail :: v -> v_Source
show/hide Instances
(Tail v t, PackedVec v, PackedVec t) => Tail (Packed v) (Packed t)
Tail (a :. as) as
class Map a b u v | u -> a, v -> b, b u -> v, a v -> u whereSource
Apply a function over each element in a vector. Constraint Map a b u v states that u is a vector of as, v is a vector of bs with the same length as u, and the function is of type a -> b.
Methods
map :: (a -> b) -> u -> vSource
show/hide Instances
(Map a b u v, PackedVec u, PackedVec v) => Map a b (Packed u) (Packed v)
Map a b (a' :. u) (b' :. v) => Map a b (a :. (a' :. u)) (b :. (b' :. v))
Map a b (a :. ()) (b :. ())
class ZipWith a b c u v w | u -> a, v -> b, w -> c, u v c -> w whereSource
Combine two vectors using a binary function. The length of the result is the min of the lengths of the arguments. The constraint ZipWith a b c u v w states that u is a vector of as, v is a vector of bs, w is a vector of cs, and the binary function is of type a -> b -> c.
Methods
zipWith :: (a -> b -> c) -> u -> v -> wSource
show/hide Instances
(ZipWith a b c u v w, PackedVec u, PackedVec v, PackedVec w) => ZipWith a b c (Packed u) (Packed v) (Packed w)
ZipWith a b c (a' :. u) (b' :. v) (c' :. w) => ZipWith a b c (a :. (a' :. u)) (b :. (b' :. v)) (c :. (c' :. w))
ZipWith a b c (a :. (a :. as)) (b :. ()) (c :. ())
ZipWith a b c (a :. ()) (b :. (b :. bs)) (c :. ())
ZipWith a b c (a :. ()) (b :. ()) (c :. ())
class Fold a v | v -> a whereSource
Fold a function over a vector.
Methods
fold :: (a -> a -> a) -> v -> aSource
foldl :: (b -> a -> b) -> b -> v -> bSource
foldr :: (a -> b -> b) -> b -> v -> bSource
show/hide Instances
(Fold a v, PackedVec v) => Fold a (Packed v)
Fold a (a' :. u) => Fold a (a :. (a' :. u))
Fold a (a :. ())
reverse :: Reverse' () v v' => v -> v'Source
Reverse a vector
class Reverse' p v v' | p v -> v' whereSource
Reverse helper function : accumulates the reversed list in its first argument
Methods
reverse' :: p -> v -> v'Source
show/hide Instances
Reverse' p () p
(Reverse' () v v', PackedVec v, PackedVec v') => Reverse' () (Packed v) (Packed v')
(Reverse' () v v', PackedVec v, PackedVec v') => Reverse' () (Packed v) (Packed v')
Reverse' (a :. p) v v' => Reverse' p (a :. v) v'
class Append v1 v2 v3 | v1 v2 -> v3, v1 v3 -> v2 whereSource
Append two vectors
Methods
append :: v1 -> v2 -> v3Source
show/hide Instances
Append () v v
Append (a' :. v1) v2 v3 => Append (a :. (a' :. v1)) v2 (a :. v3)
Append (a :. ()) v (a :. v)
class Take n v v' | n v -> v' whereSource
take n v constructs a vector from the first n elements of v. n is a type-level natural. For example take n3 v makes a 3-vector of the first three elements of v.
Methods
take :: n -> v -> v'Source
show/hide Instances
Take N0 v ()
Take N0 v ()
(Take (Succ n) v v', PackedVec v, PackedVec v') => Take (Succ n) (Packed v) (Packed v')
(Take (Succ n) v v', PackedVec v, PackedVec v') => Take (Succ n) (Packed v) (Packed v')
Take n v v' => Take (Succ n) (a :. v) (a :. v')
Take n v v' => Take (Succ n) (a :. v) (a :. v')
class Drop n v v' | n v -> v' whereSource
drop n v strips the first n elements from v. n is a type-level natural. For example drop n2 v drops the first two elements.
Methods
drop :: n -> v -> v'Source
show/hide Instances
Drop N0 v v
(Drop n v v', PackedVec v, PackedVec v') => Drop n (Packed v) (Packed v')
Drop n (a :. v) v' => Drop (Succ n) (a :. (a :. v)) v'
Drop n (a :. v) v' => Drop (Succ n) (a :. (a :. v)) v'
class Last v a | v -> a whereSource
Get the last element, usually significant for some reason (quaternions, homogenous coordinates, whatever)
Methods
last :: v -> aSource
show/hide Instances
(Last v l, PackedVec v) => Last (Packed v) l
Last (a' :. v) a => Last (a :. (a' :. v)) a
Last (a :. ()) a
class Snoc v a v' | v a -> v', v' -> v a, v -> a whereSource
snoc v a appends the element a to the end of v.
Methods
snoc :: v -> a -> v'Source
show/hide Instances
Snoc () a (a :. ())
Snoc () a (a :. ())
(Snoc v a v', PackedVec v, PackedVec v') => Snoc (Packed v) a (Packed v')
Snoc v a (a :. v) => Snoc (a :. v) a (a :. (a :. v))
class Length v n | v -> n whereSource
The length of a vector
Methods
length :: v -> IntSource
show/hide Instances
Length () N0
Length () N0
(Length v n, PackedVec v) => Length (Packed v) n
Length v n => Length (a :. v) (Succ n)
Length v n => Length (a :. v) (Succ n)
sum :: (Fold a v, Num a) => v -> aSource
sum of vector elements
product :: (Fold a v, Num a) => v -> aSource
product of vector elements
maximum :: (Fold a v, Ord a) => v -> aSource
maximum vector element
minimum :: (Fold a v, Ord a) => v -> aSource
minimum vector element
toList :: Fold a v => v -> [a]Source
Matrix Types
type Mat22 a = Vec2 (Vec2 a)Source
type Mat23 a = Vec2 (Vec3 a)Source
type Mat24 a = Vec2 (Vec4 a)Source
type Mat32 a = Vec3 (Vec2 a)Source
type Mat33 a = Vec3 (Vec3 a)Source
type Mat34 a = Vec3 (Vec4 a)Source
type Mat35 a = Vec3 (Vec5 a)Source
type Mat36 a = Vec3 (Vec6 a)Source
type Mat42 a = Vec4 (Vec2 a)Source
type Mat43 a = Vec4 (Vec3 a)Source
type Mat44 a = Vec4 (Vec4 a)Source
type Mat45 a = Vec4 (Vec5 a)Source
type Mat46 a = Vec4 (Vec6 a)Source
type Mat47 a = Vec4 (Vec7 a)Source
type Mat48 a = Vec4 (Vec8 a)Source
matToLists :: (Fold a v, Fold v m) => m -> [[a]]Source
convert a matrix to a list-of-lists
matToList :: (Fold a v, Fold v m) => m -> [a]Source
convert a matrix to a list in row-major order
matFromLists :: (Vec j a v, Vec i v m) => [[a]] -> mSource
convert a list-of-lists into a matrix
matFromList :: forall i j v m a. (Vec i v m, Vec j a v, Nat i) => [a] -> mSource
convert a list into a matrix. (row-major order)
Produced by Haddock version 2.3.0