export declare class Set { private getIdentifier; private _items; constructor(getIdentifier: (item: T) => string, ...items: T[]); readonly size: number; add(...items: T[]): void; remove(item: T): void; pop(): T; has(item: T): boolean; readonly items: T[]; equals(that: Set): boolean; readonly empty: boolean; union(...those: Set[]): Set; intersect(that: Set): Set; filter(predicate: (item: T) => boolean): Set; map(getIdentifier: (item: U) => string, transform: (item: T) => U): Set; mapSame(transform: (item: T) => T): Set; some(predicate: (item: T) => boolean): boolean; minus(that: Set): Set; take(): T; product(that: Set): Set<[T, T]>; } export declare class StringSet extends Set { constructor(...items: string[]); } export declare class NumberSet extends Set { constructor(...items: number[]); } export declare function range(min: number, max: number): Set;