Copyright | (C) 2012-2015 Edward Kmett |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <[email protected]> |
Stability | provisional |
Portability | portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Linear.Vector
Description
Operations on free vector spaces.
Synopsis
- class Functor f => Additive f where
- newtype E t = E {}
- negated :: (Functor f, Num a) => f a -> f a
- (^*) :: (Functor f, Num a) => f a -> a -> f a
- (*^) :: (Functor f, Num a) => a -> f a -> f a
- (^/) :: (Functor f, Fractional a) => f a -> a -> f a
- sumV :: (Foldable f, Additive v, Num a) => f (v a) -> v a
- basis :: (Additive t, Traversable t, Num a) => [t a]
- basisFor :: (Traversable t, Num a) => t b -> [t a]
- scaled :: (Traversable t, Num a) => t a -> t (t a)
- outer :: (Functor f, Functor g, Num a) => f a -> g a -> f (g a)
- unit :: (Additive t, Num a) => ASetter' (t a) a -> t a
Documentation
class Functor f => Additive f where Source #
A vector is an additive group with additional structure.
Minimal complete definition
Nothing
Methods
The zero vector
(^+^) :: Num a => f a -> f a -> f a infixl 6 Source #
Compute the sum of two vectors
>>>
V2 1 2 ^+^ V2 3 4
V2 4 6
(^-^) :: Num a => f a -> f a -> f a infixl 6 Source #
Compute the difference between two vectors
>>>
V2 4 5 ^-^ V2 3 1
V2 1 4
lerp :: Num a => a -> f a -> f a -> f a Source #
Linearly interpolate between two vectors.
Since linear version 1.23, interpolation direction has been reversed; now
lerp 0 a b == a lerp 1 a b == b
liftU2 :: (a -> a -> a) -> f a -> f a -> f a Source #
Apply a function to merge the 'non-zero' components of two vectors, unioning the rest of the values.
default liftU2 :: Applicative f => (a -> a -> a) -> f a -> f a -> f a Source #
liftI2 :: (a -> b -> c) -> f a -> f b -> f c Source #
Apply a function to the components of two vectors.
- For a dense vector this is equivalent to
liftA2
. - For a sparse vector this is equivalent to
intersectionWith
.
default liftI2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c Source #
Instances
Additive ZipList Source # | |
Defined in Linear.Vector Methods zero :: Num a => ZipList a Source # (^+^) :: Num a => ZipList a -> ZipList a -> ZipList a Source # (^-^) :: Num a => ZipList a -> ZipList a -> ZipList a Source # lerp :: Num a => a -> ZipList a -> ZipList a -> ZipList a Source # liftU2 :: (a -> a -> a) -> ZipList a -> ZipList a -> ZipList a Source # liftI2 :: (a -> b -> c) -> ZipList a -> ZipList b -> ZipList c Source # | |
Additive Complex Source # | |
Defined in Linear.Vector Methods zero :: Num a => Complex a Source # (^+^) :: Num a => Complex a -> Complex a -> Complex a Source # (^-^) :: Num a => Complex a -> Complex a -> Complex a Source # lerp :: Num a => a -> Complex a -> Complex a -> Complex a Source # liftU2 :: (a -> a -> a) -> Complex a -> Complex a -> Complex a Source # liftI2 :: (a -> b -> c) -> Complex a -> Complex b -> Complex c Source # | |
Additive Identity Source # | |
Defined in Linear.Vector Methods zero :: Num a => Identity a Source # (^+^) :: Num a => Identity a -> Identity a -> Identity a Source # (^-^) :: Num a => Identity a -> Identity a -> Identity a Source # lerp :: Num a => a -> Identity a -> Identity a -> Identity a Source # liftU2 :: (a -> a -> a) -> Identity a -> Identity a -> Identity a Source # liftI2 :: (a -> b -> c) -> Identity a -> Identity b -> Identity c Source # | |
Additive IntMap Source # | |
Defined in Linear.Vector Methods zero :: Num a => IntMap a Source # (^+^) :: Num a => IntMap a -> IntMap a -> IntMap a Source # (^-^) :: Num a => IntMap a -> IntMap a -> IntMap a Source # lerp :: Num a => a -> IntMap a -> IntMap a -> IntMap a Source # liftU2 :: (a -> a -> a) -> IntMap a -> IntMap a -> IntMap a Source # liftI2 :: (a -> b -> c) -> IntMap a -> IntMap b -> IntMap c Source # | |
Additive Plucker Source # | |
Defined in Linear.Plucker Methods zero :: Num a => Plucker a Source # (^+^) :: Num a => Plucker a -> Plucker a -> Plucker a Source # (^-^) :: Num a => Plucker a -> Plucker a -> Plucker a Source # lerp :: Num a => a -> Plucker a -> Plucker a -> Plucker a Source # liftU2 :: (a -> a -> a) -> Plucker a -> Plucker a -> Plucker a Source # liftI2 :: (a -> b -> c) -> Plucker a -> Plucker b -> Plucker c Source # | |
Additive Quaternion Source # | |
Defined in Linear.Quaternion Methods zero :: Num a => Quaternion a Source # (^+^) :: Num a => Quaternion a -> Quaternion a -> Quaternion a Source # (^-^) :: Num a => Quaternion a -> Quaternion a -> Quaternion a Source # lerp :: Num a => a -> Quaternion a -> Quaternion a -> Quaternion a Source # liftU2 :: (a -> a -> a) -> Quaternion a -> Quaternion a -> Quaternion a Source # liftI2 :: (a -> b -> c) -> Quaternion a -> Quaternion b -> Quaternion c Source # | |
Additive V0 Source # | |
Defined in Linear.V0 | |
Additive V1 Source # | |
Defined in Linear.V1 | |
Additive V2 Source # | |
Defined in Linear.V2 | |
Additive V3 Source # | |
Defined in Linear.V3 | |
Additive V4 Source # | |
Defined in Linear.V4 | |
Additive Vector Source # | |
Defined in Linear.Vector Methods zero :: Num a => Vector a Source # (^+^) :: Num a => Vector a -> Vector a -> Vector a Source # (^-^) :: Num a => Vector a -> Vector a -> Vector a Source # lerp :: Num a => a -> Vector a -> Vector a -> Vector a Source # liftU2 :: (a -> a -> a) -> Vector a -> Vector a -> Vector a Source # liftI2 :: (a -> b -> c) -> Vector a -> Vector b -> Vector c Source # | |
Additive Maybe Source # | |
Defined in Linear.Vector Methods zero :: Num a => Maybe a Source # (^+^) :: Num a => Maybe a -> Maybe a -> Maybe a Source # (^-^) :: Num a => Maybe a -> Maybe a -> Maybe a Source # lerp :: Num a => a -> Maybe a -> Maybe a -> Maybe a Source # liftU2 :: (a -> a -> a) -> Maybe a -> Maybe a -> Maybe a Source # liftI2 :: (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c Source # | |
Additive List Source # | |
Defined in Linear.Vector | |
Ord k => Additive (Map k) Source # | |
Defined in Linear.Vector Methods zero :: Num a => Map k a Source # (^+^) :: Num a => Map k a -> Map k a -> Map k a Source # (^-^) :: Num a => Map k a -> Map k a -> Map k a Source # lerp :: Num a => a -> Map k a -> Map k a -> Map k a Source # liftU2 :: (a -> a -> a) -> Map k a -> Map k a -> Map k a Source # liftI2 :: (a -> b -> c) -> Map k a -> Map k b -> Map k c Source # | |
Additive f => Additive (Point f) Source # | |
Defined in Linear.Affine Methods zero :: Num a => Point f a Source # (^+^) :: Num a => Point f a -> Point f a -> Point f a Source # (^-^) :: Num a => Point f a -> Point f a -> Point f a Source # lerp :: Num a => a -> Point f a -> Point f a -> Point f a Source # liftU2 :: (a -> a -> a) -> Point f a -> Point f a -> Point f a Source # liftI2 :: (a -> b -> c) -> Point f a -> Point f b -> Point f c Source # | |
(Eq k, Hashable k) => Additive (HashMap k) Source # | |
Defined in Linear.Vector Methods zero :: Num a => HashMap k a Source # (^+^) :: Num a => HashMap k a -> HashMap k a -> HashMap k a Source # (^-^) :: Num a => HashMap k a -> HashMap k a -> HashMap k a Source # lerp :: Num a => a -> HashMap k a -> HashMap k a -> HashMap k a Source # liftU2 :: (a -> a -> a) -> HashMap k a -> HashMap k a -> HashMap k a Source # liftI2 :: (a -> b -> c) -> HashMap k a -> HashMap k b -> HashMap k c Source # | |
Dim n => Additive (V n) Source # | |
(Additive f, Additive g) => Additive (Product f g) Source # | |
Defined in Linear.Vector Methods zero :: Num a => Product f g a Source # (^+^) :: Num a => Product f g a -> Product f g a -> Product f g a Source # (^-^) :: Num a => Product f g a -> Product f g a -> Product f g a Source # lerp :: Num a => a -> Product f g a -> Product f g a -> Product f g a Source # liftU2 :: (a -> a -> a) -> Product f g a -> Product f g a -> Product f g a Source # liftI2 :: (a -> b -> c) -> Product f g a -> Product f g b -> Product f g c Source # | |
Additive ((->) b) Source # | |
Defined in Linear.Vector Methods zero :: Num a => b -> a Source # (^+^) :: Num a => (b -> a) -> (b -> a) -> b -> a Source # (^-^) :: Num a => (b -> a) -> (b -> a) -> b -> a Source # lerp :: Num a => a -> (b -> a) -> (b -> a) -> b -> a Source # liftU2 :: (a -> a -> a) -> (b -> a) -> (b -> a) -> b -> a Source # liftI2 :: (a -> b0 -> c) -> (b -> a) -> (b -> b0) -> b -> c Source # | |
(Additive f, Additive g) => Additive (Compose f g) Source # | |
Defined in Linear.Vector Methods zero :: Num a => Compose f g a Source # (^+^) :: Num a => Compose f g a -> Compose f g a -> Compose f g a Source # (^-^) :: Num a => Compose f g a -> Compose f g a -> Compose f g a Source # lerp :: Num a => a -> Compose f g a -> Compose f g a -> Compose f g a Source # liftU2 :: (a -> a -> a) -> Compose f g a -> Compose f g a -> Compose f g a Source # liftI2 :: (a -> b -> c) -> Compose f g a -> Compose f g b -> Compose f g c Source # |
Basis element
Instances
negated :: (Functor f, Num a) => f a -> f a Source #
Compute the negation of a vector
>>>
negated (V2 2 4)
V2 (-2) (-4)
(^*) :: (Functor f, Num a) => f a -> a -> f a infixl 7 Source #
Compute the right scalar product
>>>
V2 3 4 ^* 2
V2 6 8
(*^) :: (Functor f, Num a) => a -> f a -> f a infixl 7 Source #
Compute the left scalar product
>>>
2 *^ V2 3 4
V2 6 8
(^/) :: (Functor f, Fractional a) => f a -> a -> f a infixl 7 Source #
Compute division by a scalar on the right.
sumV :: (Foldable f, Additive v, Num a) => f (v a) -> v a Source #
Sum over multiple vectors
>>>
sumV [V2 1 1, V2 3 4]
V2 4 5
basis :: (Additive t, Traversable t, Num a) => [t a] Source #
Produce a default basis for a vector space. If the dimensionality
of the vector space is not statically known, see basisFor
.
basisFor :: (Traversable t, Num a) => t b -> [t a] Source #
Produce a default basis for a vector space from which the argument is drawn.
scaled :: (Traversable t, Num a) => t a -> t (t a) Source #
Produce a diagonal (scale) matrix from a vector.
>>>
scaled (V2 2 3)
V2 (V2 2 0) (V2 0 3)