@jsoldi/hkt
Version:
Higher kinded types for typescript and a few utility monads.
23 lines • 689 B
JavaScript
const is_semiring = Symbol("is_semiring");
/** Creates an `ISemiring` from an `ISemiringBase`. */
export function semiring(base) {
if (is_semiring in base)
return base;
const zero = base.sum.empty;
const one = base.mult.empty;
return {
...{ [is_semiring]: true },
zero,
one,
plus: (...as) => base.sum.concat(as),
times: (...as) => base.mult.concat(as),
fromNatural: function (natural) {
let result = zero();
for (let i = 0; i < natural; i++)
result = this.plus(result, one());
return result;
},
...base,
};
}
//# sourceMappingURL=semiring.js.map