import type { List } from "."; import type { Args, Call1W, Fn1, GenericFn, GenericResolver, Param0 } from "../HKT"; /** * Determine if every element in a {@link List} (i.e., fixed-length tuple) satisfies a predicate. * * Sig: `(pred: (x: T) => boolean, xs: List) => boolean` */ export type Every, TS extends List> = number extends TS["length"] ? boolean : TS extends readonly [infer Head, ...infer Tail] ? Call1W extends true ? Every : false : true; interface Resolver extends GenericResolver<[Fn1, List], boolean> { on1_: ([pred]: Args) => [[List>], boolean]; on_1: ([, xs]: Args) => [[Fn1<(typeof xs)[number], boolean>], boolean]; on11: ([pred, xs]: Args) => [[], boolean]; } /** * [Fn] Determine if every element in a {@link List} (i.e., fixed-length tuple) satisfies a * predicate. * * Sig: `(pred: (x: T) => boolean, xs: List) => boolean` */ export default interface EveryFn extends GenericFn { def: ([pred, xs]: Args) => Every; }