import { Functor } from "./functor";
import { AbstractMonad } from "./monad";
export declare abstract class Free extends AbstractMonad {
static of(b: B): Free;
of(b: B): Free;
abstract map(f: (a: A) => B): Free;
multi: false;
static multi: boolean;
abstract chain(f: (a: A) => Free): Free;
}
export declare class Pure extends Free {
private val;
constructor(val: A);
map(f: (a: A) => B): Free;
chain(f: (a: A) => Free): Free;
}
export declare class Bind extends Free {
private val;
constructor(val: Functor>);
map(f: (a: A) => B): Free;
chain(f: (a: A) => Free): Free;
}
export declare function liftF(t: Functor): Free;