import type { SemiringMin } from './Semiring' import { Semiring } from './Semiring' export interface Ring extends Semiring { readonly sub_: (x: A, y: A) => A readonly sub: (y: A) => (x: A) => A } export type RingMin = SemiringMin & { readonly sub_: (x: A, y: A) => A } export function Ring(R: RingMin): Ring { return { ...Semiring(R), sub_: R.sub_, sub: (y) => (x) => R.sub_(x, y) } }