import type { List } from "."; import type { Args, GenericFn, GenericResolver } from "../HKT"; import type { Broaden, Eq } from "../helpers"; /** * Check if a {@link List} contains a specific element. * * Sig: `(x: T, xs: List) => boolean` */ export type Contains = unknown extends T ? boolean : number extends TS["length"] ? Eq extends true ? true : boolean : TS extends readonly [infer Head, ...infer Tail] ? Eq extends true ? true : T extends Head ? Contains extends true ? true : boolean : Contains : false; interface Resolver extends GenericResolver<[unknown, List], boolean> { on1_: ([x]: Args) => [[List>], boolean]; on_1: ([, xs]: Args) => [[Broaden<(typeof xs)[number]>], boolean]; on11: ([x, xs]: Args) => [[], boolean]; } /** * [Fn] Check if a {@link List} contains a specific element. * * Sig: `(x: T, xs: List) => boolean` */ export default interface ContainsFn extends GenericFn { def: ([x, xs]: Args) => Contains; }