/**
* **This module is experimental**
*
* Experimental features are published in order to get early feedback from the community, see these tracking
* [issues](https://github.com/gcanti/io-ts/issues?q=label%3Av2.2+) for further discussions and enhancements.
*
* A feature tagged as _Experimental_ is in a high state of flux, you're at risk of it changing without notice.
*
* @since 2.2.7
*/
import { Semigroup } from 'fp-ts/es6/Semigroup'
/**
* @category model
* @since 2.2.7
*/
export interface Of {
readonly _tag: 'Of'
readonly value: A
}
/**
* @category model
* @since 2.2.7
*/
export interface Concat {
readonly _tag: 'Concat'
readonly left: FreeSemigroup
readonly right: FreeSemigroup
}
/**
* @category model
* @since 2.2.7
*/
export declare type FreeSemigroup = Of | Concat
/**
* @category constructors
* @since 2.2.7
*/
export declare const of: (a: A) => FreeSemigroup
/**
* @category constructors
* @since 2.2.7
*/
export declare const concat: (left: FreeSemigroup, right: FreeSemigroup) => FreeSemigroup
/**
* @category destructors
* @since 2.2.7
*/
export declare const fold: (
onOf: (value: A) => R,
onConcat: (left: FreeSemigroup, right: FreeSemigroup) => R
) => (f: FreeSemigroup) => R
/**
* @category instances
* @since 2.2.7
*/
export declare function getSemigroup(): Semigroup>