UNPKG

rivo

Version:

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

24 lines (21 loc) • 779 B
import type { Args, Fn } from "../HKT"; import type { Nat } from "../Num"; import type { Compare } from "../Num/Compare"; import type { Inc } from "../Num/Int/Inc"; import type { EQ, GT } from "../typeclass/Ord"; /** * Create a union of a range of numbers from `From` to `To` (exclusive). * * Sig: `(from: Nat, to: Nat) => UnionOf<Nat>` */ export type RangeOf<From extends Nat, To extends Nat> = Compare<From, To> extends GT | EQ ? never : From | RangeOf<From extends Nat ? Inc<From> : never, To>; /** * [Fn] Create a union of a range of numbers from `from` to `to` (exclusive). * * Sig: `(from: Nat, to: Nat) => UnionOf<Nat>` */ export default interface RangeOfFn extends Fn<[Nat, Nat], Nat> { def: ([from, to]: Args<this>) => RangeOf<typeof from, typeof to>; }