import type { Ary } from './ary.js'; import type { False, True } from './bool.js'; import type { Identity$, If, Ifp, Repeat } from './common.js'; import type { Apply1, Apply2, Assume, HKT1, HKT2, HKT3 } from './hkt.js'; import type { Int, Nat, Num } from './num/index.js'; export type List = readonly T[]; export type IsList = T extends List ? Num extends T['length'] ? False : True : False; export interface IsList$ extends HKT1 { new: (x: Assume) => IsList; } export type IfList = If, Then, Else>; export interface IfList$ extends HKT1 { new: (x: Assume) => IfList; } export interface IfList$$ extends HKT2 { new: ( x: Assume, y: Assume, ) => IfList; } export interface IfList$$$ extends HKT3 { new: ( x: Assume, y: Assume, z: Assume, ) => IfList; } export type IfpList = Ifp< T, IsList$, ThenFn, ElseFn >; export interface IfpList$ extends HKT1 { new: (x: Assume) => IfpList; } export interface IfpList$$ extends HKT2 { new: ( x: Assume, pred: Assume, ) => IfpList; } export interface IfpList$$$ extends HKT3 { new: ( x: Assume, pred: Assume, thenFn: Assume, ) => IfpList; } export declare namespace List { type Empty = readonly []; type ToWritable = [...AS]; interface ToWritable$ extends HKT1 { new: (as: Assume) => ToWritable; } type ToReadonly = readonly [...AS]; interface ToReadonly$ extends HKT1 { new: (as: Assume) => ToReadonly; } type Of1 = readonly [A]; interface Of1$ extends HKT1 { new: (a: Assume) => Of1; } type Of2 = readonly [A, B]; interface Of2$ extends HKT1 { new: (a: Assume) => Of2; } interface Of2$$ extends HKT2 { new: ( a: Assume, b: Assume, ) => Of2; } type Of3 = readonly [A, B, C]; interface Of3$ extends HKT1 { new: (a: Assume) => Of3; } interface Of3$$ extends HKT2 { new: ( a: Assume, b: Assume, ) => Of3; } interface Of3$$$ extends HKT3 { new: ( a: Assume, b: Assume, c: Assume, ) => Of3; } type Of4 = readonly [A, B, C, D]; interface Of4$ extends HKT1 { new: (a: Assume) => Of4; } interface Of4$$ extends HKT2 { new: ( a: Assume, b: Assume, ) => Of4; } interface Of4$$$ extends HKT3 { new: ( a: Assume, b: Assume, c: Assume, ) => Of4; } type Of5 = readonly [A, B, C, D, E]; interface Of5$ extends HKT1 { new: (a: Assume) => Of5; } interface Of5$$ extends HKT2 { new: ( a: Assume, b: Assume, ) => Of5; } interface Of5$$$ extends HKT3 { new: ( a: Assume, b: Assume, c: Assume, ) => Of5; } type Of6 = readonly [A, B, C, D, E, F]; interface Of6$ extends HKT1 { new: (a: Assume) => Of6; } interface Of6$$ extends HKT2 { new: ( a: Assume, b: Assume, ) => Of6; } interface Of6$$$ extends HKT3 { new: ( a: Assume, b: Assume, c: Assume, ) => Of6; } type Of7 = readonly [A, B, C, D, E, F, G]; interface Of7$ extends HKT1 { new: (a: Assume) => Of7; } interface Of7$$ extends HKT2 { new: ( a: Assume, b: Assume, ) => Of7; } interface Of7$$$ extends HKT3 { new: ( a: Assume, b: Assume, c: Assume, ) => Of7; } type Of8 = readonly [A, B, C, D, E, F, G, H]; interface Of8$ extends HKT1 { new: (a: Assume) => Of8; } interface Of8$$ extends HKT2 { new: ( a: Assume, b: Assume, ) => Of8; } interface Of8$$$ extends HKT3 { new: ( a: Assume, b: Assume, c: Assume, ) => Of8; } type Map = { [P in keyof AS]: Apply1; }; interface Map$ extends HKT1 { new: (as: Assume) => Map; } interface Map$$ extends HKT2 { new: ( as: Assume, f: Assume, ) => Map; } type FlatMap = Apply1< Ary.IfWritable, AS extends readonly [infer Head, ...infer Tail] ? readonly [...Apply1, ...FlatMap] : readonly [] >; interface FlatMap$ extends HKT1 { new: (as: Assume) => FlatMap; } interface FlatMap$$ extends HKT2 { new: ( as: Assume, f: Assume, ) => FlatMap; } type Filter = Apply1< Ary.IfWritable, AS extends readonly [infer Head, ...infer Tail] ? Apply1 extends True ? readonly [Head, ...Filter] : Filter, F> : readonly [] >; interface Filter$ extends HKT1 { new: (as: Assume) => Filter; } interface Filter$$ extends HKT2 { new: ( as: Assume, f: Assume, ) => Filter; } type Reject = Apply1< Ary.IfWritable, AS extends readonly [infer Head, ...infer Tail] ? Apply1 extends True ? Reject, F> : readonly [Head, ...Reject] : readonly [] >; interface Reject$ extends HKT1 { new: (as: Assume) => Reject; } interface Reject$$ extends HKT2 { new: ( as: Assume, f: Assume, ) => Reject; } type Reduce = AS extends readonly [ infer Head, ...infer Tail, ] ? Reduce> : Z; interface Reduce$ extends HKT1 { new: (as: Assume) => Reduce; } interface Reduce$$ extends HKT2 { new: ( as: Assume, f: Assume, ) => Reduce; } type Append = Apply1< Ary.IfReadonly, [...AS, T] >; interface Append$ extends HKT1 { new: (as: Assume) => Append; } interface Append$$ extends HKT2 { new: ( as: Assume, x: Assume, ) => Append; } type Prepend = Apply1< Ary.IfReadonly, [T, ...AS] >; interface Prepend$ extends HKT1 { new: (as: Assume) => Prepend; } interface Prepend$$ extends HKT2 { new: ( as: Assume, x: Assume, ) => Prepend; } type Concat = Apply1< Ary.IfReadonly, [...AS, ...BS] >; interface Concat$ extends HKT1 { new: (as: Assume) => Concat; } interface Concat$$ extends HKT2 { new: ( as: Assume, bs: Assume, ) => Concat; } type Take = Apply1< Ary.IfWritable, AS extends readonly [infer Head, ...infer Tail] ? N extends 0 ? readonly [] : readonly [Head, ...Take>] : readonly [] >; interface Take$ extends HKT1 { new: (as: Assume) => Take; } interface Take$$ extends HKT2 { new: ( as: Assume, n: Assume, ) => Take; } type TakeUntil = Apply1< Ary.IfWritable, AS extends readonly [infer Head, ...infer Tail] ? Apply1 extends True ? readonly [] : readonly [Head, ...TakeUntil] : readonly [] >; interface TakeUntil$ extends HKT1 { new: (as: Assume) => TakeUntil; } interface TakeUntil$$ extends HKT2 { new: ( as: Assume, f: Assume, ) => TakeUntil; } type Drop = Apply1< Ary.IfReadonly, AS extends readonly [unknown, ...infer Tail] ? N extends 0 ? AS : Drop> : [] >; interface Drop$ extends HKT1 { new: (as: Assume) => Drop; } interface Drop$$ extends HKT2 { new: ( as: Assume, n: Assume, ) => Drop; } type DropIndex = Apply1< Ary.IfWritable, I extends 0 ? AS extends readonly [unknown, ...infer Tail] ? ToReadonly : AS : AS extends readonly [infer Head, ...infer Tail] ? readonly [Head, ...DropIndex>] : AS >; interface DropIndex$ extends HKT1 { new: (as: Assume) => DropIndex; } interface DropIndex$$ extends HKT2 { new: ( as: Assume, i: Assume, ) => DropIndex; } type DropUntil = Apply1< Ary.IfReadonly, AS extends readonly [infer Head, ...infer Tail] ? Apply1 extends True ? AS : DropUntil : [] >; interface DropUntil$ extends HKT1 { new: (as: Assume) => DropUntil; } interface DropUntil$$ extends HKT2 { new: ( as: Assume, f: Assume, ) => DropUntil; } type Every = AS extends readonly [ infer Head, ...infer Tail, ] ? Apply1 extends True ? Every : False : True; interface Every$ extends HKT1 { new: (as: Assume) => Every; } interface Every$$ extends HKT2 { new: ( as: Assume, f: Assume, ) => Every; } type NoneMatch = AS extends readonly [ infer Head, ...infer Tail, ] ? Apply1 extends True ? False : NoneMatch : True; interface NoneMatch$ extends HKT1 { new: (as: Assume) => NoneMatch; } interface NoneMatch$$ extends HKT2 { new: ( as: Assume, f: Assume, ) => NoneMatch; } type Some = AS extends readonly [ infer Head, ...infer Tail, ] ? Apply1 extends True ? True : Apply1 | Some : False; interface Some$ extends HKT1 { new: (as: Assume) => Some; } interface Some$$ extends HKT2 { new: ( as: Assume, f: Assume, ) => Some; } type With = Apply1< Ary.IfWritable, AS extends readonly [infer Head, ...infer Tail] ? I extends 0 ? readonly [T, ...Tail] : readonly [Head, ...With, T>] : I extends -1 ? readonly [] : [...Repeat, T] >; interface With$ extends HKT1 { new: (as: Assume) => With; } interface With$$ extends HKT2 { new: ( as: Assume, i: Assume, ) => With; } interface With$$$ extends HKT3 { new: ( as: Assume, i: Assume, x: Assume, ) => With; } type Mutate = Apply1< Ary.IfReadonly, BS >; interface Mutate$ extends HKT1 { new: (as: Assume) => Mutate; } interface Mutate$$ extends HKT2 { new: ( as: Assume, bs: Assume, ) => Mutate; } type Length = AS['length']; interface Length$ extends HKT1 { new: (as: Assume) => Length; } type Get = AS extends readonly [ infer Head extends AS[0], ...infer Tail, ] ? I extends 0 ? Head : Get> : never; interface Get$ extends HKT1 { new: (as: Assume) => Get; } interface Get$$ extends HKT2 { new: ( as: Assume, i: Assume, ) => Get; } type Head = AS extends readonly [ infer Head extends AS[0], ...unknown[], ] ? Head : never; interface Head$ extends HKT1 { new: (as: Assume) => Head; } } //# sourceMappingURL=list.d.ts.map