import type { Semigroup } from "@principia/prelude/Semigroup"; export interface Element { readonly _tag: "Element"; readonly value: A; } export interface Combine { readonly _tag: "Combine"; readonly left: FreeSemigroup; readonly right: FreeSemigroup; } export declare type FreeSemigroup = Element | Combine; /** * @category Constructors * @since 1.0.0 */ export declare const combine: (left: FreeSemigroup, right: FreeSemigroup) => FreeSemigroup; /** * @category Constructors * @since 1.0.0 */ export declare const element: (a: A) => FreeSemigroup; /** * @category Destructors * @since 1.0.0 */ export declare const fold: ( onOf: (value: A) => R, onConcat: (left: FreeSemigroup, right: FreeSemigroup) => R ) => (f: FreeSemigroup) => R; /** * @category Instances * @since 1.0.0 */ export declare const getSemigroup: () => Semigroup>; //# sourceMappingURL=model.d.ts.map