Stability | experimental |
---|---|
Maintainer | Sebastian Fischer <mailto:mail@sebfisch.de> |
This library provides a type class for semirings and instances for standard data types.
Documentation
class Eq s => Semiring s whereSource
A semiring is an additive commutative monoid with identity zero
:
a .+. b == b .+. a zero .+. a == a (a .+. b) .+. c == a .+. (b .+. c)
A semiring is a multiplicative monoid with identity one
:
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 Eq
instance.
For example, the Booleans form a semiring.
-
False
is an identity of disjunction which is commutative and associative, -
True
is an identity of conjunction which is associative, - conjunction distributes over disjunction, and
-
False
annihilates the Booleans with respect to conjunction.
fromBool :: Semiring s => Bool -> sSource
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.
Numeric | |
|