@beenotung/tslib
Version:
utils library in Typescript
17 lines (16 loc) • 780 B
TypeScript
/**
* monad factory
* reference : https://github.com/douglascrockford/monad/blob/master/monad.js
* */
export interface Monad<A> {
is_monad: true;
bind<B>(f: (a: A, ...args: any[]) => Monad<B>, args?: ArrayLike<any>): Monad<B>;
map<B>(f: (a: A, ...args: any[]) => B, args?: ArrayLike<any>): Monad<B>;
}
export interface Unit<M extends Monad<A>, A> {
<M extends Monad<A>, A>(value: A): M;
method(name: PropertyKey, f: (...args: any[]) => any): Unit<M, A>;
lift_value<B>(name: PropertyKey, f: (a: A, ...args: any[]) => Monad<B>): Unit<Monad<B>, B>;
lift<B>(name: PropertyKey, f: (a: A, ...args: any[]) => Monad<B> | B): Unit<M, A>;
}
export declare function createUnit<M extends Monad<A>, A>(modifier?: (monad: Monad<A>, value: A) => any): Unit<M, A>;