export declare function multiKeySet(m: Map>, a: A, b: B, v: V): void;
/** replace strings in a text according to a relacement map
* replaced strings must be 'tokens', surrounded by spaces or punctuation
*/
export declare function replaceWords(text: string, replace: Record): string;
/** return an array partitioned into possibly overlapping groups */
export declare function grouped(a: T[], size: number, stride?: number): T[][];
/** group an array into subarrays by a key function */
export declare function groupBy(a: T[], key: (t: T) => K): Map;
/** partition an array into two parts by a discriminator function */
export declare function partition(a: T[], partFn: (t: T) => boolean): [T[], T[]];
/** run an carrying function over every element in an array,
* i.e. an inclusive prefix scan */
export declare function scan(array: T[], fn: (a: T, b: U) => U, zero: U): U[];
/** return a new record by replacing values in 'a' with 'b' as a map.
* values in 'a' that are not in 'b' are unchanged.
* e.g. {a: "b", x: 9}, {b: 1} yields {a: 1, x: 9}
*/
export declare function mapForward(a: Record, b: Record): Record;
/** return the last element of an array or undefined */
export declare function last(a: T[]): T | undefined;
/**
* Overlap two arrays, returning the tail of b if a is a prefix of b.
* Otherwise, return undefined.
*/
export declare function overlapTail(a: T[], b: T[]): T[] | undefined;