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.