import * as HKT from './HKT' export interface ContravariantFunctor extends HKT.Base { readonly contramap: ContramapFn readonly contramap_: ContramapFn_ } export interface ContravariantFunctor2 extends HKT.CompositionBase2 { readonly contramap: ContramapFn2 } export function getContravariantFunctorComposition< F extends HKT.URIS, G extends HKT.URIS, CF = HKT.Auto, CG = HKT.Auto >(F: ContravariantFunctor, G: ContravariantFunctor): ContravariantFunctor2 export function getContravariantFunctorComposition( F: ContravariantFunctor>, G: ContravariantFunctor> ) { return HKT.instance, HKT.UHKT>>({ contramap: (f) => F.contramap(G.contramap(f)) }) } export interface ContramapFn { (f: (a: B) => A): ( fa: HKT.Kind ) => HKT.Kind } export interface ContramapFn_ { ( fa: HKT.Kind, f: (a: B) => A ): HKT.Kind } export interface ContramapFn2 { (f: (b: A) => B): < NF extends string, KF, QF, WF, XF, IF, SF, RF, EF, NG extends string, KG, QG, WG, XG, IG, SG, RG, EG >( fa: HKT.Kind> ) => HKT.Kind> }