/** * @since 0.24.0 */ import type { Kind, TypeLambda } from "effect/HKT" import type { Monoid } from "./Monoid.js" import type { SemiCoproduct } from "./SemiCoproduct.js" import * as semiCoproduct from "./SemiCoproduct.js" /** * @category type class * @since 0.24.0 */ export interface Coproduct extends SemiCoproduct { readonly zero: () => Kind readonly coproductAll: ( collection: Iterable> ) => Kind } /** * @since 0.24.0 */ export const getMonoid = (F: Coproduct) => (): Monoid< Kind > => ({ ...semiCoproduct.getSemigroup(F)(), empty: F.zero(), combineAll: F.coproductAll })