semirings-0.6: two monoids as one, in holy haskimony
Haskellers are usually familiar with monoids and semigroups. A monoid has an appending operation <>
(or mappend
),
and an identity element, mempty
. A semigroup has an appending <>
operation, but does not require a mempty
element.
A Semiring has two appending operations, plus
and times
, and two respective identity elements, zero
and one
.
More formally, a Semiring R is a set equipped with two binary relations +
and *
, such that:
(R,+) is a commutative monoid with identity element 0,
(R,*) is a monoid with identity element 1,
(*) left and right distributes over addition, and
multiplication by '0' annihilates R.