UNPKG

rivo

Version:

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

29 lines (25 loc) • 952 B
import type { List } from "."; import type { Args, GenericFn, GenericResolver } from "../HKT"; import type { Broaden } from "../helpers"; /** * Prepend an element to a {@link List} (i.e., fixed-length tuple). * * Sig: `<T>(x: T, xs: List<T>) => List<T>` */ export type Prepend<T, TS extends List> = TS extends unknown[] ? [T, ...TS] : readonly [T, ...TS]; interface Resolver extends GenericResolver<[unknown, List], List> { on1_: ([x]: Args<this>) => [[List<Broaden<typeof x>>], List<Broaden<typeof x>>]; on_1: ([, xs]: Args<this>) => [ [Broaden<(typeof xs)[number]>], List<Broaden<(typeof xs)[number]>>, ]; on11: ([x, xs]: Args<this>) => [[], List<Broaden<typeof x>>]; } /** * [Fn] Prepend an element to a {@link List} (i.e., fixed-length tuple). * * Sig: `<T>(x: T, xs: List<T>) => List<T>` */ export default interface PrependFn extends GenericFn<Resolver> { def: ([x, xs]: Args<this>) => Prepend<typeof x, typeof xs>; }