rivo
Version:
🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.
28 lines (24 loc) • 819 B
TypeScript
import type { List } from ".";
import type { Args, GenericFn, GenericResolver } from "../HKT";
import type { None, Option, Some } from "../Option";
/**
* Get all elements in a {@link List} except the first one.
*
* Sig: `<T>(xs: List<T>) => Option<List<T>>`
*/
export type Tail<TS extends List> =
TS extends readonly [unknown, ...infer Tail] ? Some<Tail> : None;
interface Resolver extends GenericResolver<[List], Option<List<unknown>>> {
on1: ([xs]: Args<this>) => [
[],
Option<typeof xs extends unknown[] ? (typeof xs)[number][] : List<(typeof xs)[number]>>,
];
}
/**
* [Fn] Get all elements in a {@link List} except the first one.
*
* Sig: `<T>(xs: List<T>) => Option<List<T>>`
*/
export default interface TailFn extends GenericFn<Resolver> {
def: ([xs]: Args<this>) => Tail<typeof xs>;
}