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.RealRing.
I think that the RealIntegral superclass is too restrictive. Non-negative numbers are not a ring, but can be easily converted to Integers.
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