This is the type class of a ring with a notion of an absolute value, satisfying the laws
a * b === b * a
a /= 0 => abs (signum a) === 1
abs a * signum a === aMinimal definition: abs, signum.
If the type is in the Ord class we expect abs = absOrd and signum = signumOrd and we expect the following laws to hold:
a + (max b c) === max (a+b) (a+c)
negate (max b c) === min (negate b) (negate c)
a * (max b c) === max (a*b) (a*c) where a >= 0
absOrd a === max a (-a)If the type is ZeroTestable, then it should hold
isZero a === signum a == signum (negate a)We do not require Ord as superclass
since we also want to have Number.Complex as instance.
We also do not require ZeroTestable as superclass,
because we like to have expressions of foreign languages
to be instances (cf. embedded domain specific language approach, EDSL),
as well as function types.
abs for complex numbers alone may have an inappropriate type,
because it does not reflect that the absolute value is a real number.
You might prefer magnitude.
This type class is intended for unifying algorithms
that work for both real and complex numbers.
Note the similarity to Algebra.Units:
abs plays the role of stdAssociate
and signum plays the role of stdUnit.
Actually, since abs can be defined using max and negate
we could relax the superclasses to Additive and Ord
if his class would only contain signum.
Instances25C, …
C IntegerDefined in numeric-prelude-0.4.4 · Algebra.AbsoluteC Int16Defined in numeric-prelude-0.4.4 · Algebra.AbsoluteC Int32Defined in numeric-prelude-0.4.4 · Algebra.AbsoluteC Int64Defined in numeric-prelude-0.4.4 · Algebra.AbsoluteC Int8Defined in numeric-prelude-0.4.4 · Algebra.AbsoluteC Word16Defined in numeric-prelude-0.4.4 · Algebra.AbsoluteC Word32Defined in numeric-prelude-0.4.4 · Algebra.AbsoluteC Word64Defined in numeric-prelude-0.4.4 · Algebra.AbsoluteC Word8Defined in numeric-prelude-0.4.4 · Algebra.AbsoluteC DoubleDefined in numeric-prelude-0.4.4 · Algebra.AbsoluteC FloatDefined in numeric-prelude-0.4.4 · Algebra.AbsoluteC IntDefined in numeric-prelude-0.4.4 · Algebra.AbsoluteC WordDefined in numeric-prelude-0.4.4 · Algebra.AbsoluteC TDefined in numeric-prelude-0.4.4 · Number.FixedPoint.CheckC TDefined in numeric-prelude-0.4.4 · Number.PeanoC TDefined in numeric-prelude-0.4.4 · Number.Positional.CheckNum a => C (T a)Defined in numeric-prelude-0.4.4 · MathObj.Wrapper.Haskell98C a => C (T a)Defined in numeric-prelude-0.4.4 · MathObj.Wrapper.NumericPrelude(C a, C a, C a) => C (T a)Defined in numeric-prelude-0.4.4 · Number.Complex(C a, C a) => C (T a)Defined in numeric-prelude-0.4.4 · Number.Ratio(C a, C a, C a) => C (T a)Defined in numeric-prelude-0.4.4 · Number.NonNegativeChunky(C a, Ord a, C a) => C (T a)Defined in numeric-prelude-0.4.4 · Number.NonNegative · orphanC v => C (T a v)Defined in numeric-prelude-0.4.4 · Number.OccasionallyScalarExpressionC v => C (T a v)Defined in numeric-prelude-0.4.4 · Number.SI(Ord i, C a) => C (T i a)Defined in numeric-prelude-0.4.4 · Number.Physical