import type { Functor, Functor$GetTypeClassW } from "."; import type { Args, Call2W, Fn1, GenericFn, GenericResolver, GenericReturn1W, Param0, Return, } from "../../HKT"; import type { HKT$Extract, HKT$GetConstruct, HKT$Mutate } from "../HKT"; /** * Map a {@link Functor} through a function. * * Sig: `, T, U>(f: (x: T) => U, fa: F) => F` */ export type Map>> = Call2W< Functor$GetTypeClassW["Map"], F, FA >; interface Resolver extends GenericResolver<[Fn1, Functor], Functor> { on1_: ([f]: Args) => [[Functor>], Functor>]; on_1: ([, fa]: Args) => [ [Fn1, unknown>], HKT$GetConstruct, ]; on11: ([f, fa]: Args) => [ [], HKT$Mutate>>, ]; } /** * [Fn] Map a {@link Functor} through a function. * * Sig: `, T, U>(fa: F, f: (x: T) => U) => F` */ export default interface MapFn extends GenericFn { def: ([f, fa]: Args) => typeof fa extends Functor> ? Map : never; }