/** * A `Functor` is a type constructor which supports a mapping operation `map`. * * `map` can be used to turn functions `a -> b` into functions `f a -> f b` whose argument and return types use the type * constructor `f` to represent some computational context. * * Instances must satisfy the following laws: * * 1. Identity: `F.map(fa, a => a) <-> fa` * 2. Composition: `F.map(fa, a => bc(ab(a))) <-> F.map(F.map(fa, ab), bc)` * * @since 2.0.0 */ import { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from './HKT' /** * @category type classes * @since 2.0.0 */ export interface Functor { readonly URI: F readonly map: (fa: HKT, f: (a: A) => B) => HKT } /** * @category type classes * @since 2.0.0 */ export interface Functor1 { readonly URI: F readonly map: (fa: Kind, f: (a: A) => B) => Kind } /** * @category type classes * @since 2.0.0 */ export interface Functor2 { readonly URI: F readonly map: (fa: Kind2, f: (a: A) => B) => Kind2 } /** * @category type classes * @since 2.0.0 */ export interface Functor2C { readonly URI: F readonly _E: E readonly map: (fa: Kind2, f: (a: A) => B) => Kind2 } /** * @category type classes * @since 2.0.0 */ export interface Functor3 { readonly URI: F readonly map: (fa: Kind3, f: (a: A) => B) => Kind3 } /** * @category type classes * @since 2.2.0 */ export interface Functor3C { readonly URI: F readonly _E: E readonly map: (fa: Kind3, f: (a: A) => B) => Kind3 } /** * @category type classes * @since 2.0.0 */ export interface Functor4 { readonly URI: F readonly map: (fa: Kind4, f: (a: A) => B) => Kind4 } /** * @since 2.0.0 */ export interface FunctorComposition { readonly map: (fa: HKT>, f: (a: A) => B) => HKT> } /** * @since 2.0.0 */ export interface FunctorCompositionHKT1 { readonly map: (fa: HKT>, f: (a: A) => B) => HKT> } /** * @since 2.0.0 */ export interface FunctorCompositionHKT2 { readonly map: (fa: HKT>, f: (a: A) => B) => HKT> } /** * @since 2.0.0 */ export interface FunctorCompositionHKT2C { readonly map: (fa: HKT>, f: (a: A) => B) => HKT> } /** * @since 2.0.0 */ export interface FunctorComposition11 { readonly map: (fa: Kind>, f: (a: A) => B) => Kind> } /** * @since 2.0.0 */ export interface FunctorComposition12 { readonly map: (fa: Kind>, f: (a: A) => B) => Kind> } /** * @since 2.0.0 */ export interface FunctorComposition12C { readonly map: (fa: Kind>, f: (a: A) => B) => Kind> } /** * @since 2.0.0 */ export interface FunctorComposition21 { readonly map: (fa: Kind2>, f: (a: A) => B) => Kind2> } /** * @since 2.0.0 */ export interface FunctorComposition2C1 { readonly map: (fa: Kind2>, f: (a: A) => B) => Kind2> } /** * @since 2.0.0 */ export interface FunctorComposition22 { readonly map: (fa: Kind2>, f: (a: A) => B) => Kind2> } /** * @since 2.0.0 */ export interface FunctorComposition22C { readonly map: (fa: Kind2>, f: (a: A) => B) => Kind2> } /** * @since 2.2.0 */ export interface FunctorComposition23 { readonly map: (fa: Kind2>, f: (a: A) => B) => Kind2> } /** * @since 2.2.0 */ export interface FunctorComposition23C { readonly map: (fa: Kind2>, f: (a: A) => B) => Kind2> } /** * @since 2.0.0 */ export declare function getFunctorComposition( F: Functor2, G: Functor3C ): FunctorComposition23C export declare function getFunctorComposition( F: Functor2, G: Functor2C ): FunctorComposition22C export declare function getFunctorComposition( F: Functor2, G: Functor2 ): FunctorComposition22 export declare function getFunctorComposition( F: Functor2C, G: Functor1 ): FunctorComposition2C1 export declare function getFunctorComposition( F: Functor2, G: Functor1 ): FunctorComposition21 export declare function getFunctorComposition( F: Functor1, G: Functor2C ): FunctorComposition12C export declare function getFunctorComposition( F: Functor1, G: Functor2 ): FunctorComposition12 export declare function getFunctorComposition( F: Functor1, G: Functor1 ): FunctorComposition11 export declare function getFunctorComposition(F: Functor, G: Functor): FunctorComposition