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: `, T>(f: F>) => F` */ export type Flatten> = Call1W["Flatten"], F>; interface Resolver extends GenericResolver<[Monad], Monad> { on1: ([f]: Args) => [[], HKT$Mutate>>]; on_r: ([, r]: Args) => [ HKT$Mutate extends infer R extends Monad ? R : never, ]; } /** * [Fn] Flatten a {@link Monad} of a {@link Monad} into a {@link Monad}. * * Sig: `, T>(f: F>) => F` */ export default interface FlattenFn extends GenericFn { def: ([f]: Args) => Flatten; }