import type { Fn3, Maybe, Pair } from "@thi.ng/api";
import type { EquivSetOpts, IEquivSet } from "./api.js";
/**
 * An alternative set implementation to the native ES6 Set type. Uses
 * customizable equality/equivalence predicate and so is more useful when
 * dealing with structured data. Implements full API of native Set and by the
 * default uses
 * [`equiv`](https://docs.thi.ng/umbrella/equiv/functions/equiv.html) for
 * equivalence checking.
 *
 * Additionally, the type also implements the
 * [`ICopy`](https://docs.thi.ng/umbrella/api/interfaces/ICopy.html),
 * [`IEmpty`](https://docs.thi.ng/umbrella/api/interfaces/IEmpty.html) and
 * [`IEquiv`](https://docs.thi.ng/umbrella/api/interfaces/IEquiv.html)
 * interfaces itself.
 */
export declare class ArraySet<T> extends Set<T> implements IEquivSet<T> {
    constructor(vals?: Iterable<T> | null, opts?: Partial<EquivSetOpts<T>>);
    [Symbol.iterator](): IterableIterator<T>;
    get [Symbol.species](): typeof ArraySet;
    get [Symbol.toStringTag](): string;
    get size(): number;
    copy(): ArraySet<T>;
    empty(): ArraySet<T>;
    clear(): void;
    first(): Maybe<T>;
    add(key: T): this;
    into(keys: Iterable<T>): this;
    has(key: T): boolean;
    /**
     * Returns the canonical value for `x`, if present. If the set
     * contains no equivalent for `x`, returns `notFound`.
     *
     * @param key - search key
     * @param notFound - default value
     */
    get(key: T, notFound?: T): Maybe<T>;
    delete(key: T): boolean;
    disj(keys: Iterable<T>): this;
    equiv(o: any): boolean;
    /**
     * The value args given to the callback `fn` MUST be treated as
     * readonly/immutable. This could be enforced via TS, but would
     * break ES6 Set interface contract.
     *
     * @param fn -
     * @param thisArg -
     */
    forEach(fn: Fn3<T, T, Set<T>, void>, thisArg?: any): void;
    entries(): IterableIterator<Pair<T, T>>;
    keys(): IterableIterator<T>;
    values(): IterableIterator<T>;
    opts(): EquivSetOpts<T>;
}
export declare const defArraySet: <T>(vals?: Iterable<T> | null, opts?: Partial<EquivSetOpts<T>>) => ArraySet<T>;
//# sourceMappingURL=array-set.d.ts.map