@jsoldi/hkt
Version:
Higher kinded types for typescript and a few utility monads.
44 lines • 1.63 kB
TypeScript
import { KRoot } from "../core/hkt.js";
import { IMonadPlus } from "../classes/monadPlus.js";
import { Maybe } from "./maybe.js";
/**
* @deprecated use `Async<T>` instead
*/
export type Gen<T> = AsyncGenerator<T, void, void>;
/**
* @deprecated use `KAsync` instead
*/
export interface KGen extends KRoot {
readonly 0: unknown;
readonly body: Gen<this[0]>;
}
type Awaitable<T> = T | Promise<T>;
type GenLike<T> = (() => GenLike<T>) | T[] | Promise<T>;
/**
* @deprecated use `IAsync` instead
*/
export interface IGen extends IMonadPlus<KGen> {
from: <T>(genlike: GenLike<T>) => Gen<T>;
flat: <T>(gen: Gen<Gen<T>>) => Gen<T>;
take: (n: number) => <T>(fa: Gen<T>) => Gen<T>;
forEach: <T>(f: (a: T) => void) => (fa: Gen<T>) => Gen<T>;
toArray: <T>(fa: Gen<T>) => Promise<T[]>;
filter: {
<T, S extends T>(pred: (a: T) => a is S): (fa: Gen<T>) => Gen<S>;
<T>(pred: (a: T) => unknown): (fa: Gen<T>) => Gen<T>;
};
takeWhile: <T>(pred: (a: T) => unknown) => (fa: Gen<T>) => Gen<T>;
skipWhile: <T>(pred: (a: T) => unknown) => (fa: Gen<T>) => Gen<T>;
distinctBy: <T, K>(key: (a: T) => K) => (fa: Gen<T>) => Gen<T>;
distinct: <T>(fa: Gen<T>) => Gen<T>;
chunks: <T>(size: number) => (fa: Gen<T>) => Gen<T[]>;
reduce: <T, U>(acc: U, f: (acc: U, a: T) => U) => (fa: Gen<T>) => Promise<U>;
unfoldr: <A, B>(f: (b: B) => Awaitable<Maybe<[A, B]>>) => (b: B) => Gen<A>;
flatMapFrom: <A, B>(f: (a: A) => GenLike<B>) => (fa: Gen<A>) => Gen<B>;
}
/**
* @deprecated use `async` instead
*/
export declare const gen: IGen;
export {};
//# sourceMappingURL=gen.d.ts.map