import type { Args, Fn } from "../HKT"; import type { List } from "../List"; import type { Assert, Cast } from "../helpers"; type _ToList> = { 0: _ToList, [LastU, ...LN]>; 1: LN; }[[U] extends [never] ? 1 : 0]; type Last = IntersectOf void : never> extends (x: infer P) => void ? P : never; type IntersectOf = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never; /** * Convert a union type to a `List`. * * Sig: `(u: UnionOf) => List` */ export type ToList = Assert, _ToList extends infer X ? Cast : never>; /** * [Fn] Convert a union type to a `List`. * * Sig: `(u: UnionOf) => List` */ export default interface ToListFn extends Fn<[unknown], unknown> { def: ([u]: Args) => ToList; }