Provides generic typeclasses for common operations among many types: addition, subtraction, scalar multiplication, magnitude, and zero.
- class (AbstractZero v, AbstractAdd v v, AbstractSubtract v v, AbstractScale v) => AbstractVector v
- class AbstractZero a where
- zero :: a
- class AbstractAdd p v | p -> v where
- add :: p -> v -> p
- class AbstractSubtract p v | p -> v where
- sub :: p -> p -> v
- class AbstractScale v where
- scalarMultiply :: RSdouble -> v -> v
- class AbstractMagnitude v where
- abstractScaleTo :: (AbstractScale v, AbstractMagnitude v) => RSdouble -> v -> v
- abstractSum :: (AbstractAdd p v, AbstractZero p) => [v] -> p
- abstractAverage :: (AbstractAdd p v, AbstractSubtract p v, AbstractVector v, AbstractZero p) => [p] -> p
- abstractDistance :: (AbstractMagnitude v, AbstractSubtract p v) => p -> p -> RSdouble
Documentation
class (AbstractZero v, AbstractAdd v v, AbstractSubtract v v, AbstractScale v) => AbstractVector v Source
A convenience class for many vector types.
class AbstractZero a whereSource
A data type that has an additive identity.
class AbstractAdd p v | p -> v whereSource
A data type that supports addition.
a
add
zero = a
AbstractAdd Double Double | |
AbstractAdd Float Float | |
AbstractAdd Integer Integer | |
AbstractAdd RSdouble RSdouble | |
AbstractAdd RSfloat RSfloat | |
AbstractAdd BoundAngle Angle | |
AbstractAdd Angle Angle | |
AbstractAdd Vector3D Vector3D | |
AbstractAdd Point3D Vector3D | |
AbstractAdd a b => AbstractAdd [a] [b] | |
HasResolution a => AbstractAdd (Fixed a) (Fixed a) | |
AbstractAdd a a' => AbstractAdd (x -> a) (x -> a') | |
(AbstractAdd a a', AbstractAdd b b') => AbstractAdd (a, b) (a', b') |
class AbstractSubtract p v | p -> v whereSource
A data type that supports subtraction.
a
sub
a = zero
AbstractSubtract Double Double | |
AbstractSubtract Float Float | |
AbstractSubtract Integer Integer | |
AbstractSubtract RSdouble RSdouble | |
AbstractSubtract RSfloat RSfloat | |
AbstractSubtract BoundAngle Angle | |
AbstractSubtract Angle Angle | |
AbstractSubtract Vector3D Vector3D | |
AbstractSubtract Point3D Vector3D | |
AbstractSubtract a b => AbstractSubtract [a] [b] | |
HasResolution a => AbstractSubtract (Fixed a) (Fixed a) | |
AbstractSubtract a a' => AbstractSubtract (x -> a) (x -> a') | |
(AbstractSubtract a a', AbstractSubtract b b') => AbstractSubtract (a, b) (a', b') |
class AbstractScale v whereSource
A data type that supports scalar multiplication.
scalarMultiply 0 a = zero
scalarMultiply :: RSdouble -> v -> vSource
AbstractScale Double | |
AbstractScale Float | |
AbstractScale RSdouble | |
AbstractScale RSfloat | |
AbstractScale Angle | |
AbstractScale Vector3D | |
AbstractScale a => AbstractScale [a] | |
HasResolution a => AbstractScale (Fixed a) | |
AbstractScale a => AbstractScale (x -> a) | |
(AbstractScale a, AbstractScale b) => AbstractScale (a, b) |
class AbstractMagnitude v whereSource
A data type that supports scalar magnitude.
magnitude (scalarMultiply (recip $ magnitude a) a) = 1
abstractScaleTo :: (AbstractScale v, AbstractMagnitude v) => RSdouble -> v -> vSource
Force a vector to the specified magnitude.
abstractSum :: (AbstractAdd p v, AbstractZero p) => [v] -> pSource
Sum of a list.
abstractAverage :: (AbstractAdd p v, AbstractSubtract p v, AbstractVector v, AbstractZero p) => [p] -> pSource
Average of a list.
abstractDistance :: (AbstractMagnitude v, AbstractSubtract p v) => p -> p -> RSdoubleSource
Distance between two points, based on the magnitude
of the difference.