import * as types from '../../../.types';
import isInIter from '../.utils/in-iter';
export declare namespace classify {
    function singleDistribute<X>(values: Iterable<X>, classifier: singleDistribute.Classifier<X>, duplicationChecker?: isInIter.Comparator<X>): singleDistribute.Classification<X>;
    namespace singleDistribute {
        type Classification<X> = Readonly<Dict<Classification.Array<X>>>;
        namespace Classification {
            type Array<X> = ReadonlyArray<X>;
        }
        type Classifier<X> = (x: X) => string;
    }
    function multiDistribute<X>(values: Iterable<X>, classifier: multiDistribute.Classifier<X>, duplicationChecker?: isInIter.Comparator<X>): multiDistribute.MultipleDistribution<X>;
    namespace multiDistribute {
        interface MultipleDistribution<X> {
            readonly classified: MultipleDistribution.Classified<X>;
            readonly unclassified: MultipleDistribution.Unclassified<X>;
        }
        namespace MultipleDistribution {
            type Classified<X> = Readonly<Dict<Distribution<X>>>;
            type Unclassified<X> = ReadonlyArray<X>;
            type Distribution<X> = ReadonlyArray<X>;
        }
        type Classifier<X> = (x: X) => ReadonlyArray<string>;
    }
    type Dict<X> = Readonly<types.Dict.StrKey<X>>;
}
export default classify;
