import { Monoid, MonoidDictionary, AnyMonoid } from "./monoid"; import { AbstractMonad } from "./monad"; export declare class Writer, A> extends AbstractMonad { identity: W; state: W; value: A; constructor(identity: W, state: W, value: A); of(a: A): Writer; chain(f: (a: A) => Writer): Writer; multi: boolean; } export declare function runWriter, A>(w: Writer): [W, A]; export declare type WriterFunctions> = { tell(w: W): Writer; listen(w: Writer): Writer; of(a: A): Writer; multi: boolean; }; export declare function createWriter(mc: ArrayConstructor): WriterFunctions; export declare function createWriter(mc: StringConstructor): WriterFunctions; export declare function createWriter>(mc: MonoidDictionary): WriterFunctions;