UNPKG

rivo

Version:

🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.

27 lines (23 loc) • 935 B
import type { Monad, Monad$GetTypeClassW } from "."; import type { Args, Call1W, GenericFn, GenericResolver } from "../../HKT"; import type { HKT$Extract, HKT$ExtractW, HKT$Mutate } from "../HKT"; /** * Flatten a {@link Monad} of a {@link Monad} into a {@link Monad}. * * Sig: `<F<~>, T>(f: F<F<T>>) => F<T>` */ export type Flatten<F extends Monad<Monad>> = Call1W<Monad$GetTypeClassW<F>["Flatten"], F>; interface Resolver extends GenericResolver<[Monad<Monad>], Monad> { on1: ([f]: Args<this>) => [[], HKT$Mutate<typeof f, HKT$ExtractW<HKT$Extract<typeof f>>>]; on_r: ([, r]: Args<this>) => [ HKT$Mutate<typeof r, typeof r> extends infer R extends Monad<Monad> ? R : never, ]; } /** * [Fn] Flatten a {@link Monad} of a {@link Monad} into a {@link Monad}. * * Sig: `<F<~>, T>(f: F<F<T>>) => F<T>` */ export default interface FlattenFn extends GenericFn<Resolver> { def: ([f]: Args<this>) => Flatten<typeof f>; }