/** * Contravariant * * 1. u.contramap(a => a) is equivalent to u (identity) * 2. u.contramap(x => f(g(x))) is equivalent to u.contramap(f).contramap(g) (composition) * * contramap :: Contravariant f => f a ~> (b -> a) -> f b */ import { HKT, KindOf, URIS } from './HKT'; export interface Contravariant { readonly URI: F; readonly contramap: (fa: HKT, f: (b: B) => A) => HKT; } export interface Contravariant1 { readonly URI: F; readonly contramap: (fa: KindOf, f: (b: B) => A) => KindOf; } export interface Contravariant2 { readonly URI: F; readonly contramap: (fa: KindOf, f: (b: B) => A) => KindOf; }