Semiring overview
The Semiring class is for types that support an addition and multiplication operation.
Instances must satisfy the following laws:
- Commutative monoid under addition:
- Associativity:
(a + b) + c = a + (b + c) - Identity:
zero + a = a + zero = a - Commutative:
a + b = b + a
- Associativity:
- Monoid under multiplication:
- Associativity:
(a * b) * c = a * (b * c) - Identity:
one * a = a * one = a
- Associativity:
- Multiplication distributes over addition:
- Left distributivity:
a * (b + c) = (a * b) + (a * c) - Right distributivity:
(a + b) * c = (a * c) + (b * c)
- Left distributivity:
- Annihilation:
zero * a = a * zero = zero
Note: The number type is not fully law abiding members of this class hierarchy due to the potential for arithmetic overflows, and the presence of NaN and Infinity values. The behaviour is unspecified in these cases.
Added in v1.0.0
Table of contents
utils
Semiring (interface)
Signature
export interface Semiring<A> extends HasZero<A>, HasOne<A>, HasAdd<A>, HasMul<A> {}
Added in v1.0.0
getFunctionSemiring
Signature
export declare function getFunctionSemiring<A, B>(S: Semiring<B>): Semiring<(a: A) => B>
Added in v1.0.0