/** * The `Applicative` type class extends the `Apply` type class with a `of` function, which can be used to create values * of type `f a` from values of type `a`. * * Where `Apply` provides the ability to lift functions of two or more arguments to functions whose arguments are * wrapped using `f`, and `Functor` provides the ability to lift functions of one argument, `pure` can be seen as the * function which lifts functions of _zero_ arguments. That is, `Applicative` functors support a lifting operation for * any number of function arguments. * * Instances must satisfy the following laws in addition to the `Apply` laws: * * 1. Identity: `A.ap(A.of(a => a), fa) <-> fa` * 2. Homomorphism: `A.ap(A.of(ab), A.of(a)) <-> A.of(ab(a))` * 3. Interchange: `A.ap(fab, A.of(a)) <-> A.ap(A.of(ab => ab(a)), fab)` * * Note. `Functor`'s `map` can be derived: `A.map(x, f) = A.ap(A.of(f), x)` * * @since 2.0.0 */ import { Apply, Apply1, Apply2, Apply2C, Apply3, Apply3C, Apply4 } from './Apply.js'; import { FunctorComposition, FunctorComposition2C1, FunctorComposition11, FunctorComposition12, FunctorComposition12C, FunctorComposition21, FunctorComposition22, FunctorComposition22C, FunctorCompositionHKT1, FunctorCompositionHKT2, FunctorCompositionHKT2C } from './Functor.js'; import { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from './HKT.js'; import { Monoid } from './Monoid.js'; import { Pointed, Pointed1, Pointed2, Pointed2C, Pointed3, Pointed3C, Pointed4 } from './Pointed.js'; /** * @category model * @since 2.0.0 */ export interface Applicative extends Apply, Pointed { } /** * @category model * @since 2.0.0 */ export interface Applicative1 extends Apply1, Pointed1 { } /** * @category model * @since 2.0.0 */ export interface Applicative2 extends Apply2, Pointed2 { } /** * @category model * @since 2.0.0 */ export interface Applicative2C extends Apply2C, Pointed2C { } /** * @category model * @since 2.0.0 */ export interface Applicative3 extends Apply3, Pointed3 { } /** * @category model * @since 2.2.0 */ export interface Applicative3C extends Apply3C, Pointed3C { } /** * @category model * @since 2.0.0 */ export interface Applicative4 extends Apply4, Pointed4 { } /** * Lift a monoid into 'F', the inner values are concatenated using the provided `Monoid`. * * @since 2.10.0 */ export declare function getApplicativeMonoid(F: Applicative4): (M: Monoid) => Monoid>; export declare function getApplicativeMonoid(F: Applicative3): (M: Monoid) => Monoid>; export declare function getApplicativeMonoid(F: Applicative3C): (M: Monoid) => Monoid>; export declare function getApplicativeMonoid(F: Applicative2): (M: Monoid) => Monoid>; export declare function getApplicativeMonoid(F: Applicative2C): (M: Monoid) => Monoid>; export declare function getApplicativeMonoid(F: Applicative1): (M: Monoid) => Monoid>; export declare function getApplicativeMonoid(F: Applicative): (M: Monoid) => Monoid>; /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface ApplicativeComposition extends FunctorComposition { readonly of: (a: A) => HKT>; readonly ap: (fgab: HKT B>>, fga: HKT>) => HKT>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface ApplicativeCompositionHKT1 extends FunctorCompositionHKT1 { readonly of: (a: A) => HKT>; readonly ap: (fgab: HKT B>>, fga: HKT>) => HKT>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface ApplicativeCompositionHKT2 extends FunctorCompositionHKT2 { readonly of: (a: A) => HKT>; readonly ap: (fgab: HKT B>>, fga: HKT>) => HKT>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface ApplicativeCompositionHKT2C extends FunctorCompositionHKT2C { readonly of: (a: A) => HKT>; readonly ap: (fgab: HKT B>>, fga: HKT>) => HKT>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface ApplicativeComposition11 extends FunctorComposition11 { readonly of: (a: A) => Kind>; readonly ap: (fgab: Kind B>>, fga: Kind>) => Kind>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface ApplicativeComposition12 extends FunctorComposition12 { readonly of: (a: A) => Kind>; readonly ap: (fgab: Kind B>>, fga: Kind>) => Kind>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface ApplicativeComposition12C extends FunctorComposition12C { readonly of: (a: A) => Kind>; readonly ap: (fgab: Kind B>>, fga: Kind>) => Kind>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface ApplicativeComposition21 extends FunctorComposition21 { readonly of: (a: A) => Kind2>; readonly ap: (fgab: Kind2 B>>, fga: Kind2>) => Kind2>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface ApplicativeComposition2C1 extends FunctorComposition2C1 { readonly of: (a: A) => Kind2>; readonly ap: (fgab: Kind2 B>>, fga: Kind2>) => Kind2>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface ApplicativeComposition22 extends FunctorComposition22 { readonly of: (a: A) => Kind2>; readonly ap: (fgab: Kind2 B>>, fga: Kind2>) => Kind2>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface ApplicativeComposition22C extends FunctorComposition22C { readonly of: (a: A) => Kind2>; readonly ap: (fgab: Kind2 B>>, fga: Kind2>) => Kind2>; } /** * Use [`ap`](./Apply.ts.html#ap) instead. * * @category zone of death * @since 2.0.0 * @deprecated */ export declare function getApplicativeComposition(F: Applicative2, G: Applicative2C): ApplicativeComposition22C; /** @deprecated */ export declare function getApplicativeComposition(F: Applicative2, G: Applicative2): ApplicativeComposition22; /** @deprecated */ export declare function getApplicativeComposition(F: Applicative2, G: Applicative2C): ApplicativeComposition22C; /** @deprecated */ export declare function getApplicativeComposition(F: Applicative2, G: Applicative1): ApplicativeComposition21; /** @deprecated */ export declare function getApplicativeComposition(F: Applicative1, G: Applicative2): ApplicativeComposition12; /** @deprecated */ export declare function getApplicativeComposition(F: Applicative1, G: Applicative2C): ApplicativeComposition12C; /** @deprecated */ export declare function getApplicativeComposition(F: Applicative1, G: Applicative1): ApplicativeComposition11; /** @deprecated */ export declare function getApplicativeComposition(F: Applicative, G: Applicative2): ApplicativeCompositionHKT2; /** @deprecated */ export declare function getApplicativeComposition(F: Applicative, G: Applicative2C): ApplicativeCompositionHKT2C; /** @deprecated */ export declare function getApplicativeComposition(F: Applicative, G: Applicative1): ApplicativeCompositionHKT1; /** @deprecated */ export declare function getApplicativeComposition(F: Applicative, G: Applicative): ApplicativeComposition;