This class lets us deal with the units in a ring.
isUnit tells whether an element is a unit.
The other operations let us canonically
write an element as a unit times another element.
Two elements a, b of a ring R are _associates_ if a=b*u for a unit u.
For an element a, we want to write it as a=b*u where b is an associate of a.
The map (a->b) is called
StandardAssociate by Gap,
"unitCanonical" by Axiom,
and "canAssoc" by DoCon.
The map (a->u) is called
"canInv" by DoCon and
"unitNormal(x).unit" by Axiom.
The laws are
stdAssociate x * stdUnit x === x
stdUnit x * stdUnitInv x === 1
isUnit u ==> stdAssociate x === stdAssociate (x*u)Currently some algorithms assume
stdAssociate(x*y) === stdAssociate x * stdAssociate yMinimal definition: isUnit and (stdUnit or stdUnitInv) and optionally stdAssociate
Instances11C, …
C IntegerDefined in numeric-prelude-0.4.4 · Algebra.UnitsC Int16Defined in numeric-prelude-0.4.4 · Algebra.UnitsC Int32Defined in numeric-prelude-0.4.4 · Algebra.UnitsC Int64Defined in numeric-prelude-0.4.4 · Algebra.UnitsC Int8Defined in numeric-prelude-0.4.4 · Algebra.UnitsC IntDefined in numeric-prelude-0.4.4 · Algebra.UnitsC TDefined in numeric-prelude-0.4.4 · Number.PeanoIntegral 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(Ord 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 · MathObj.Polynomial