UNPKG

hkt-toolbelt

Version:

Functional and composable type utilities

51 lines (50 loc) 1.49 kB
import { Type, Kind } from '..'; type _$simpleJoin<T extends (string | number)[], O extends string = ''> = T extends [ infer Head extends string | number, ...infer Tail extends (string | number)[] ] ? _$simpleJoin<Tail, `${O}${Head}`> : O; /** * Given a list of digits, return a natural number. * * @param {Digit.Digit[]} T - The list of digits. * * @example * ```ts * import { NaturalNumber } from "hkt-toolbelt"; * * type T0 = NaturalNumber._$undigits<[1, 2, 3]>; // 123 * type T1 = NaturalNumber._$undigits<[4, 5, 6]>; // 456 * ``` */ export type _$undigits<T extends (string | number)[]> = _$simpleJoin<T> extends `${infer N extends number}` ? N : never; /** * Given a list of digits, return a natural number. * * @param {Digit.Digit[]} T - The list of digits. * * @example * ```ts * import { NaturalNumber } from "hkt-toolbelt"; * * type T0 = $<NaturalNumber.Undigits, [1, 2, 3]>; // 123 * type T1 = $<NaturalNumber.Undigits, [4, 5, 6]>; // 456 * ``` */ export interface Undigits extends Kind.Kind { f(x: Type._$cast<this[Kind._], (string | number)[]>): _$undigits<typeof x>; } /** * Given a list of digits, return a natural number. * * @param {Digit.Digit[]} T - The list of digits. * * @example * ```ts * import { NaturalNumber } from "hkt-toolbelt"; * * const T0 = NaturalNumber.undigits([1, 2, 3]); // 123 * const T1 = NaturalNumber.undigits([4, 5, 6]); // 456 * ``` */ export declare const undigits: Kind._$reify<Undigits>; export {};