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;