UNPKG

@beenotung/tslib

Version:
17 lines (16 loc) 780 B
/** * 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>;