@jsoldi/hkt
Version:
Higher kinded types for typescript and a few utility monads.
20 lines • 1.09 kB
TypeScript
import { $, $B2, ITypeClass } from "../core/hkt.js";
import { TypeClassArg } from "./utilities.js";
import { IMonad } from "./monad.js";
/** The minimal definition of a traversable. */
export interface ITraversableBase<F> extends ITypeClass<F> {
/** Map each element in `fa` to a monad and evaluate the results from left to right. */
traverse<M>(m: IMonad<M>): <A, B>(f: (a: A) => $<M, B>) => (fa: $<F, A>) => $<M, $<F, B>>;
}
/** The traversable interface. */
export type ITraversable<F> = ITraversableBase<F> & {
/** Evaluate each monadic value in `fma` from left to right. */
sequence<M>(m: IMonad<M>): <A>(fma: $<F, $<M, A>>) => $<M, $<F, A>>;
/** Nest a traversable within another traversable. */
nestTraversable<G>(t: ITraversableBase<G>): ITraversable<$B2<F, G>>;
};
declare const is_traversable: unique symbol;
/** Creates an `ITraversable` from an `ITraversableBase`. */
export declare function traversable<F>(base: TypeClassArg<ITraversableBase<F>, ITraversable<F>, typeof is_traversable>): ITraversable<F>;
export {};
//# sourceMappingURL=traversable.d.ts.map