import type { CovariantComposition } from "@tsplus/stdlib/prelude/Covariant" /** * @tsplus type Contravariant */ export interface Contravariant extends HKT.Typeclass { readonly Law: { readonly Contravariant: "Contravariant" } readonly contramap: ( f: (b: B) => A ) => (fa: HKT.Kind) => HKT.Kind } /** * @tsplus type Contravariant/Ops */ export interface ContravariantOps {} export const Contravariant: ContravariantOps = {} /** * @tsplus static Contravariant/Ops getComposition */ export function getContravariantComposition( F: Contravariant, G: Contravariant ): CovariantComposition { return HKT.instance({ map: (f: (a: A) => B): ( fa: HKT.Kind> ) => HKT.Kind> => F.contramap(G.contramap(f)) }) }