export type Many = [T, T, ...T[]]; export type OneMany = T | Many; export type Opt = undefined | OneMany; export type Compare = (a: T, b: T) => number; export declare class Sorted { compare: Compare; constructor(compare: Compare); add>(data: Opt, item: U): OneMany; union>(a: Opt, b: Opt): Opt; find>(data: Opt, item: U): U | undefined; has>(data: Opt, item: U): boolean; findIndex>(data: Opt, item: U): number; groupBy, K>(data: Opt, cb: (item: U) => K): Map>; isSuperset>(superset: Opt, subset: Opt): boolean; } export declare function push(data: Opt, item: T): OneMany; export declare function concat(a: Opt, b: Opt): Opt; export declare function size(data: Opt): number; export declare function filter(data: Opt, cb: (item: T) => boolean): Opt; export declare function forEach(data: Opt, cb: (item: T, index: number) => void): void; export declare function fromIter(data: Iterable): T | Many | undefined; export declare function toIter(data: Opt): Iterable; export declare function includes(data: Opt, item: T): boolean; export declare function find(data: Opt, cb: (item: T, index: number) => boolean): Opt; export declare function some(data: Opt, cb: (item: T, index: number) => boolean): boolean; export declare function toArray(data: Opt, cb: (item: T, index: number) => R): R[]; export declare function mapToString(data: Opt, sep: string, cb: (item: T, index: number) => string): string; export declare function filterMap(data: Opt, cb: (item: T) => undefined | R): Opt; export declare function findSorted(compare: Compare, data: T[], item: T): T | undefined; export declare function findIndexSorted(compare: Compare, data: T[], item: T): number; export declare function addSorted(compare: Compare, data: U, item: T): U;