import type { List } from "."; import type { Args, GenericFn, GenericResolver } from "../HKT"; /** * Reverse a {@link List}. * * Sig: `(xs: List) => List` */ export type Reverse = TS extends unknown[] ? ReverseWritable : ReverseReadonly; type ReverseReadonly = TS extends readonly [infer Head, ...infer Tail] ? ReverseReadonly : Result; type ReverseWritable = TS extends readonly [infer Head, ...infer Tail] ? ReverseWritable : Result; interface Resolver extends GenericResolver<[List], List> { on1: ([xs]: Args) => [ [], typeof xs extends (infer T)[] ? T[] : typeof xs extends readonly (infer T)[] ? readonly T[] : never, ]; } /** * [Fn] Reverse a {@link List}. * * Sig: `(xs: List) => List` */ export default interface ReverseFn extends GenericFn { def: ([xs]: Args) => Reverse; }