Field again corresponds to a commutative ring.
Division is partially defined and satisfies
not (isZero b) ==> (a * b) / b === a
not (isZero a) ==> a * recip a === one
when it is defined.
To safely call division,
the program must take typespecific action;
e.g., the following is appropriate in many cases:
safeRecip :: (Integral a, Eq a, Field.C a) => a > Maybe a
safeRecip x =
let (q,r) = one `divMod` x
in toMaybe (isZero r) q
Typical examples include rationals, the real numbers,
and rational functions (ratios of polynomial functions).
An instance should be typically declared
only if most elements are invertible.
Actually, we have also used this type class for nonfields
containing lots of units,
e.g. residue classes with respect to nonprimes and power series.
So the restriction not (isZero a) must be better isUnit a.
Minimal definition: recip or (/)
