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