|Maintainer||Sebastian Fischer <mailto:firstname.lastname@example.org>|
This library provides a type class for semirings and instances for standard data types.
A semiring is an additive commutative monoid with identity
a .+. b == b .+. a zero .+. a == a (a .+. b) .+. c == a .+. (b .+. c)
A semiring is a multiplicative monoid with identity
one .*. a == a a .*. one == a (a .*. b) .*. c == a .*. (b .*. c)
Multiplication distributes over addition:
a .*. (b .+. c) == (a .*. b) .+. (a .*. c) (a .+. b) .*. c == (a .*. c) .+. (b .*. c)
zero annihilates a semiring with respect to multiplication:
zero .*. a == zero a .*. zero == zero
All laws should hold with respect to the required
For example, the Booleans form a semiring.
Falseis an identity of disjunction which is commutative and associative,
Trueis an identity of conjunction which is associative,
- conjunction distributes over disjunction, and
Falseannihilates the Booleans with respect to conjunction.
Auxiliary function to convert Booleans to an arbitrary semiring.
Wrapper for numeric types.
Every numeric type that satisfies the semiring laws (as all predefined numeric types do) is a semiring.