The two classes
exist to allow convenient conversions,
primarily between the built-in types.
They should satisfy
fromInteger . toInteger === id toRational . toInteger === toRational
Conversions must be lossless,
that is, they do not round in any way.
For rounding see Algebra.RealField.
With the instances for
we acknowledge that these types actually represent rationals
rather than (approximated) real numbers.
However, this contradicts to the
A prefix function of '(Algebra.Ring.^)' with a parameter order that fits the needs of partial application and function composition. It has generalised exponent.
See: Argument order of