@jsoldi/hkt
Version:
Higher kinded types for typescript and a few utility monads.
26 lines • 1.12 kB
TypeScript
import { $, $3, $B, ITypeClass } from "../core/hkt.js";
import { IMonoid } from "./monoid.js";
import { TypeClassArg } from "./utilities.js";
/** The minimal definition of a semiring. */
export interface ISemiringBase<F, M> extends ITypeClass<F> {
readonly sum: IMonoid<F>;
readonly mult: IMonoid<$3<$B, F, M>>;
}
/** The semiring interface. */
export interface ISemiring<F, M> extends ISemiringBase<F, M> {
/** The additive identity element. */
zero<A>(): $<F, A>;
/** The multiplicative identity element. */
one<A>(): $<F, $<M, A>>;
/** Adds two values. */
plus<A>(...as: $<F, A>[]): $<F, A>;
/** Multiplies two values. */
times<A>(...as: $<F, $<M, A>>[]): $<F, $<M, A>>;
/** Produces the value corresponding to the given natural number. */
fromNatural<A>(nat: number): $<F, $<M, A>>;
}
declare const is_semiring: unique symbol;
/** Creates an `ISemiring` from an `ISemiringBase`. */
export declare function semiring<F, M>(base: TypeClassArg<ISemiringBase<F, M>, ISemiring<F, M>, typeof is_semiring>): ISemiring<F, M>;
export {};
//# sourceMappingURL=semiring.d.ts.map