import { Applicative } from './applicative';
export abstract class Monad extends Applicative {
public abstract override bind(f: (a: a) => Monad): Monad;
public abstract join(this: Monad>): Monad;
}
export namespace Monad {
export declare function Return(a: a): Monad;
export function bind(f: (a: a) => Monad, m: Monad): Monad {
return m.bind(f);
}
export declare function sequence(fm: Monad[]): Monad>;
//export declare function sequence(fm: Monad>): AtomicPromise>;
}