/** * The `Chain` type class extends the `Apply` type class with a `chain` operation which composes computations in * sequence, using the return value of one computation to determine the next computation. * * Instances must satisfy the following law in addition to the `Apply` laws: * * 1. Associativity: `F.chain(F.chain(fa, afb), bfc) <-> F.chain(fa, a => F.chain(afb(a), bfc))` * * Note. `Apply`'s `ap` can be derived: `(fab, fa) => F.chain(fab, f => F.map(fa, f))` * * @since 2.0.0 */ import { Apply, Apply1, Apply2, Apply2C, Apply3, Apply3C, Apply4 } from './Apply.js'; import { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from './HKT.js'; /** * @category model * @since 2.0.0 */ export interface Chain extends Apply { readonly chain: (fa: HKT, f: (a: A) => HKT) => HKT; } /** * @category model * @since 2.0.0 */ export interface Chain1 extends Apply1 { readonly chain: (fa: Kind, f: (a: A) => Kind) => Kind; } /** * @category model * @since 2.0.0 */ export interface Chain2 extends Apply2 { readonly chain: (fa: Kind2, f: (a: A) => Kind2) => Kind2; } /** * @category model * @since 2.0.0 */ export interface Chain2C extends Apply2C { readonly chain: (fa: Kind2, f: (a: A) => Kind2) => Kind2; } /** * @category model * @since 2.0.0 */ export interface Chain3 extends Apply3 { readonly chain: (fa: Kind3, f: (a: A) => Kind3) => Kind3; } /** * @category model * @since 2.2.0 */ export interface Chain3C extends Apply3C { readonly chain: (fa: Kind3, f: (a: A) => Kind3) => Kind3; } /** * @category model * @since 2.0.0 */ export interface Chain4 extends Apply4 { readonly chain: (fa: Kind4, f: (a: A) => Kind4) => Kind4; } /** * @since 2.10.0 */ export declare function chainFirst(M: Chain4): (f: (a: A) => Kind4) => (first: Kind4) => Kind4; export declare function chainFirst(M: Chain3): (f: (a: A) => Kind3) => (first: Kind3) => Kind3; export declare function chainFirst(M: Chain3C): (f: (a: A) => Kind3) => (first: Kind3) => Kind3; export declare function chainFirst(M: Chain2): (f: (a: A) => Kind2) => (first: Kind2) => Kind2; export declare function chainFirst(M: Chain2C): (f: (a: A) => Kind2) => (first: Kind2) => Kind2; export declare function chainFirst(M: Chain1): (f: (a: A) => Kind) => (first: Kind) => Kind; export declare function chainFirst(M: Chain): (f: (a: A) => HKT) => (first: HKT) => HKT; /** * @since 2.10.0 */ export declare function bind(M: Chain4): (name: Exclude, f: (a: A) => Kind4) => (ma: Kind4) => Kind4; export declare function bind(M: Chain3): (name: Exclude, f: (a: A) => Kind3) => (ma: Kind3) => Kind3; export declare function bind(M: Chain3C): (name: Exclude, f: (a: A) => Kind3) => (ma: Kind3) => Kind3; export declare function bind(M: Chain2): (name: Exclude, f: (a: A) => Kind2) => (ma: Kind2) => Kind2; export declare function bind(M: Chain2C): (name: Exclude, f: (a: A) => Kind2) => (ma: Kind2) => Kind2; export declare function bind(M: Chain1): (name: Exclude, f: (a: A) => Kind) => (ma: Kind) => Kind; export declare function bind(M: Chain): (name: Exclude, f: (a: A) => HKT) => (ma: HKT) => HKT;