import { AsyncIterableLike } from "../async-like"; export interface Retainer extends Iterable { has?(value: T): boolean; add(value: T): void; } export interface RetainerWithHas extends Retainer { has(value: T): boolean; } export interface AsyncRetainer extends AsyncIterable { has?(value: T): boolean | Promise; add(value: T): void | Promise; } export interface AsyncRetainerWithHas extends AsyncRetainer { has(value: T): boolean | Promise; } export declare function arrayRetainer(has?: (value: T, values: T[]) => boolean): Retainer; export declare function setRetainer(): RetainerWithHas; export declare function retain(iterable: Iterable, retainer?: Retainer): Iterable; export declare function asyncRetain(iterable: AsyncIterableLike, retainer?: Retainer | AsyncRetainer): AsyncIterable;