UNPKG

@jsoldi/hkt

Version:

Higher kinded types for typescript and a few utility monads.

26 lines 1.12 kB
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