rivo
Version:
🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.
29 lines (25 loc) • 952 B
TypeScript
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>;
}