Basic numeric class.
The Haskell Report defines no laws for
Num. However, '(+)' and
'(*)' are customarily expected to define a ring and have the following
properties:
- Associativity of (+) (x + y) + z = x +
(y + z)
- Commutativity of (+) x + y = y +
x
- fromInteger 0 is the additive identity
x + fromInteger 0 = x
- negate gives the additive inverse x +
negate x = fromInteger 0
- Associativity of (*) (x * y) * z = x *
(y * z)
- fromInteger 1 is the multiplicative
identity x * fromInteger 1 = x and
fromInteger 1 * x = x
- Distributivity of (*) with respect to (+) a * (b
+ c) = (a * b) + (a * c) and (b + c) * a =
(b * a) + (c * a)
Note that it
isn't customarily expected that a type instance of
both
Num and
Ord implement an ordered ring. Indeed, in
base only
Integer and
Rational do.