// @ts-ignore - Only used in doc comments import type { Reject } from "./Reject"; // @ts-ignore - Only used in doc comments import type RejectFn from "./Reject"; import type { Args, Call1W, Fn1, GenericFn, GenericResolver, Param0 } from "../HKT"; /** * Filter a union based on a predicate. * * Sig: `(pred: (x: T) => boolean, u: UnionOf) => UnionOf` * * @see {@link Reject} for the opposite. */ export type Filter, U> = U extends U ? Call1W extends true ? U : never : never; interface Resolver extends GenericResolver<[Fn1, unknown], unknown> { on1_: ([pred]: Args) => [[Param0], Param0]; on_1: ([, u]: Args) => [[Fn1], typeof u]; on11: ([pred, u]: Args) => [[], typeof u]; } /** * [Fn] Filter a union based on a predicate. * * Sig: `(pred: (x: T) => boolean, u: UnionOf) => UnionOf` * * @see {@link RejectFn} for the opposite. */ export default interface FilterFn extends GenericFn { def: ([pred, u]: Args) => Filter; }