General function applicable to all vector types.

# Documentation

All vector types belong to this class. Aside from `vpack`

and `vunpack`

, these methods aren't especially useful to end-users; they're used internally by the vector arithmetic implementations.

vmap :: (Scalar -> Scalar) -> v -> vSource

Apply a function to all vector fields.

vzip :: (Scalar -> Scalar -> Scalar) -> v -> v -> vSource

Zip two vectors together field-by-field using the supplied function (in the style of `Data.List.zipWith`

).

vfold :: (Scalar -> Scalar -> Scalar) -> v -> ScalarSource

Reduce a vector down to a single value using the supplied binary operator. The ordering in which this happens isn't guaranteed, so the operator should probably be associative and commutative.

vpack :: [Scalar] -> Maybe vSource

Pack a list of values into a vector. Extra values are ignored, too few values yields `Nothing`

.

vunpack :: v -> [Scalar]Source

Unpack a vector into a list of values. (Always succeeds.)

(*|) :: Vector v => Scalar -> v -> vSource

Scale a vector (i.e., change its length but not its direction). This operator has the same precedence as the usual `(*)`

operator.

The `(*|)`

and `(|*)`

operators are identical, but with their argument flipped. Just remember that the '`|`

' denotes the scalar part.

(|*) :: Vector v => v -> Scalar -> vSource

Scale a vector (i.e., change its length but not its direction). This operator has the same precedence as the usual `(*)`

operator.

The `(*|)`

and `(|*)`

operators are identical, but with their argument flipped. Just remember that the '`|`

' denotes the scalar part.

vdot :: Vector v => v -> v -> ScalarSource

Take the *dot product* of two vectors. This is a scalar equal to the cosine of the angle between the two vectors multiplied by the length of each vectors.

vmag :: Vector v => v -> ScalarSource

Return the length or *magnitude* of a vector. (Note that this involves a slow square root operation.)

vnormalise :: Vector v => v -> vSource

Normalise a vector. In order words, return a new vector with the same direction, but a length of exactly one. (If the vector's length is zero or very near to zero, the vector is returned unchanged.)