extra-object
Version:
A collection of methods for working with Objects.<br>
594 lines (593 loc) • 24 kB
TypeScript
/** A dictionary is a mapping of string keys to unknown values. */ export type Dictionary = Record<string, unknown>;
export type { Dictionary as Dict };
/** Entries is a list of key-value pairs, with unique keys (indices). */ export type Entries = Iterable<[string, unknown]>;
/** Lists is a pair of key list and value list, with unique keys (indices). */ export type Lists = [Iterable<string>, Iterable<unknown>];
/**
* Handle reading of a single value.
* @returns value
*/ export type ReadFunction<T> = () => T;
/**
* Handle combining of two values.
* @param a a value
* @param b another value
* @returns combined value
*/ export type CombineFunction = (a: unknown, b: unknown) => unknown;
/**
* Handle comparison of two values.
* @param a a value
* @param b another value
* @returns a<b: -ve, a=b: 0, a>b: +ve
*/ export type CompareFunction = (a: unknown, b: unknown) => number;
/**
* Handle processing of values in an object.
* @param v value in object
* @param k key of value in object
* @param x object containing the value
*/ export type ProcessFunction = (v: unknown, k: string, x: Dictionary) => void;
/**
* Handle selection of entries in an object.
* @param v value in object
* @param k key of value in object
* @param x object containing the value
* @returns selected?
*/ export type TestFunction = (v: unknown, k: string, x: Dictionary) => boolean;
/**
* Handle transformation of a value to another.
* @param v value in object
* @param k key of value in object
* @param x object containing the value
* @returns transformed value
*/ export type MapFunction = (v: unknown, k: string, x: Dictionary | null) => unknown;
/**
* Handle reduction of multiple values into a single value.
* @param acc accumulator (temporary result)
* @param v value in object
* @param k key of value in object
* @param x object containing the value
* @returns reduced value
*/ export type ReduceFunction = (acc: unknown, v: unknown, k: string, x: Dictionary) => unknown;
/**
* Handle ending of a combined object.
* @param dones iᵗʰ object done?
* @returns combined object done?
*/ export type EndFunction = (dones: boolean[]) => boolean;
/**
* Check if value is a dictionary.
* @param v a value
* @returns v is a dictionary?
*/ export declare function is(v: unknown): v is Dictionary;
/**
* List all keys.
* @param x an object
* @returns k₀, k₁, ... | [kᵢ, vᵢ] ∈ x
*/ export declare function keys(x: Dictionary): Iterable<string>;
/**
* List all values.
* @param x an object
* @returns v₀, v₁, ... | [kᵢ, vᵢ] ∈ x
*/ export declare function values(x: Dictionary): Iterable<unknown>;
/**
* List all key-value pairs.
* @param x an object
* @returns [k₀, v₀], [k₁, v₁], ... | [kᵢ, vᵢ] ∈ x
*/ export declare function entries(x: Dictionary): Entries;
/**
* Convert entries to object.
* @param x entries
* @returns x as object
*/ export declare function fromEntries(x: Entries): Dictionary;
/**
* Convert lists to object.
* @param x lists, i.e. [keys, values]
* @returns x as object
*/ export declare function fromLists(x: Lists): Dictionary;
/**
* Compare two objects.
* @param x an object
* @param y another object
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns x=y: 0, otherwise: -ve/+ve
*/ export declare function compare(x: Dictionary, y: Dictionary, fc?: CompareFunction | null, fm?: MapFunction | null): number;
/**
* Check if two objects are equal.
* @param x an object
* @param y another object
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns fm(x[kᵢ]) ≈ fm(y[kᵢ]) ∀ kᵢ ∈ x, y
*/ export declare function isEqual(x: Dictionary, y: Dictionary, fc?: CompareFunction | null, fm?: MapFunction | null): boolean;
/**
* Get the number of keys in an object.
* @param x an object
* @returns |x|
*/ export declare function size(x: Dictionary): number;
export { size as length };
/**
* Check if an object is empty.
* @param x an object
* @returns |x| = 0?
*/ export declare function isEmpty(x: Dictionary): boolean;
/**
* Get value at specified key.
* @param x an object
* @param k key
* @returns x[k]
*/ export declare function get(x: Dictionary, k: string): unknown;
/**
* Get values at keys.
* @param x an object
* @param ks keys
* @returns [x[k], x[l], ...] | [k, l, ...] = ks
*/ export declare function getAll(x: Dictionary, ks: string[]): unknown[];
/**
* Get value at path in a nested object.
* @param x a nested object
* @param p path
* @returns x[k₀][k₁][...] | [k₀, k₁, ...] = p
*/ export declare function getPath(x: Dictionary, p: string[]): unknown;
/**
* Check if nested object has a path.
* @param x a nested object
* @param p path
* @returns x[k₀][k₁][...] exists? | [k₀, k₁, ...] = p
*/ export declare function hasPath(x: Dictionary, p: string[]): boolean;
/**
* Set value at specified key.
* @param x an object
* @param k key
* @param v value
* @returns x' | x' = x; x'[k] = v
*/ export declare function set(x: Dictionary, k: string, v: unknown): Dictionary;
/**
* Set value at specified key.
* @param x an object (updated)
* @param k key
* @param v value
* @returns x | x[k] = v
*/ export declare function set$(x: Dictionary, k: string, v: unknown): Dictionary;
/**
* Set value at path in a nested object.
* @param x a nested object (updated)
* @param p path
* @param v value
* @returns x | x[k₀][k₁][...] = v; [k₀, k₁, ...] = p
*/ export declare function setPath$(x: Dictionary, p: string[], v: unknown): Dictionary;
/**
* Exchange two values in an object.
* @param x an object
* @param k a key
* @param l another key
* @returns x' | x' = x; x'[k] = x[l]; x'[l] = x[k]
*/ export declare function swap(x: Dictionary, k: string, l: string): Dictionary;
/**
* Exchange two values in an object.
* @param x an object (updated)
* @param k a key
* @param l another key
* @returns x | x[i] ↔ x[j]
*/ export declare function swap$(x: Dictionary, k: string, l: string): Dictionary;
/**
* Remove an entry from object.
* @param x an object
* @param k key
* @returns x \\: [k]
*/ export declare function remove(x: Dictionary, k: string): Dictionary;
/**
* Remove an entry from object.
* @param x an object (updated)
* @param k key
* @returns x = x \\: [k]
*/ export declare function remove$(x: Dictionary, k: string): Dictionary;
/**
* Remove value at path in a nested object.
* @param x a nested object (updated)
* @param p path
* @returns x = x \\: [k₀][k₁][...] | [k₀, k₁, ...] = p
*/ export declare function removePath$(x: Dictionary, p: string[]): Dictionary;
/**
* Count values which satisfy a test.
* @param x an object
* @param ft test function (v, k, x)
* @returns Σtᵢ | tᵢ = 1 if ft(vᵢ) else 0; [kᵢ, vᵢ] ∈ x
*/ export declare function count(x: Dictionary, ft: TestFunction): number;
/**
* Count occurrences of values.
* @param x an object
* @param fm map function (v, k, x)
* @returns Map \{value ⇒ count\}
*/ export declare function countAs(x: Dictionary, fm?: MapFunction | null): Map<unknown, number>;
/**
* Find smallest value.
* @param x an object
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns v | v ≤ vᵢ; [kᵢ, vᵢ] ∈ x
*/ export declare function min(x: Dictionary, fc?: CompareFunction | null, fm?: MapFunction | null): unknown;
/**
* Find smallest entry.
* @param x an object
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns [min_key, min_value]
*/ export declare function minEntry(x: Dictionary, fc?: CompareFunction | null, fm?: MapFunction | null): [string, unknown];
/**
* Find largest value.
* @param x an object
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns v | v ≥ vᵢ; [kᵢ, vᵢ] ∈ x
*/ export declare function max(x: Dictionary, fc?: CompareFunction | null, fm?: MapFunction | null): unknown;
/**
* Find largest entry.
* @param x an object
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns [max_key, max_value]
*/ export declare function maxEntry(x: Dictionary, fc?: CompareFunction | null, fm?: MapFunction | null): [string, unknown];
/**
* Find smallest and largest values.
* @param x a map
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns [min_value, max_value]
*/ export declare function range(x: Dictionary, fc?: CompareFunction | null, fm?: MapFunction | null): [unknown, unknown];
/**
* Find smallest and largest entries.
* @param x an object
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns [min_entry, max_entry]
*/ export declare function rangeEntries(x: Dictionary, fc?: CompareFunction | null, fm?: MapFunction | null): [[string, unknown], [string, unknown]];
/**
* Gets first entry from object (default order).
* @param x an object
* @param ed default entry
* @returns [k₀, v₀] if x ≠ Φ else ed | [k₀, v₀] ∈ x
*/ export declare function head(x: Dictionary, ed?: [string, unknown]): [string, unknown];
/**
* Get object without its first entry (default order).
* @param x an object
* @returns x \\ \{[k₀, v₀]\} if x ≠ Φ else x | [k₀, v₀] ∈ x
*/ export declare function tail(x: Dictionary): Dictionary;
/**
* Keep first n entries only (default order).
* @param x an object
* @param n number of entries [1]
* @returns \{[k₀, v₀], [k₁, v₁], ...\} | [kᵢ, vᵢ] ∈ x and |\{[k₀, v₀], [k₁, v₁], ...\}| ≤ n
*/ export declare function take(x: Dictionary, n?: number): Dictionary;
/**
* Keep first n entries only (default order).
* @param x an object (updated)
* @param n number of entries [1]
* @returns x = \{[k₀, v₀], [k₁, v₁], ...\} | [kᵢ, vᵢ] ∈ x and |\{[k₀, v₀], [k₁, v₁], ...\}| ≤ n
*/ export declare function take$(x: Dictionary, n?: number): Dictionary;
/**
* Remove first n entries (default order).
* @param x an object
* @param n number of entries [1]
* @returns \{[kₙ, vₙ], [kₙ₊₁, vₙ₊₁], ...\} | [kᵢ, vᵢ] ∈ x and |\{[kₙ, vₙ], [kₙ₊₁, vₙ₊₁], ...\}| ≤ max(|x| - n, 0)
*/ export declare function drop(x: Dictionary, n?: number): Dictionary;
/**
* Remove first n entries (default order).
* @param x an object (updated)
* @param n number of entries [1]
* @returns x = \{[kₙ, vₙ], [kₙ₊₁, vₙ₊₁], ...\} | [kᵢ, vᵢ] ∈ x and |\{[kₙ, vₙ], [kₙ₊₁, vₙ₊₁], ...\}| ≤ max(|x| - n, 0)
*/ export declare function drop$(x: Dictionary, n?: number): Dictionary;
/**
* List all possible subsets.
* @param x an object
* @param n number of entries [-1 ⇒ any]
* @returns entries selected by bit from 0..2^|x| if n<0; only of length n otherwise
*/ export declare function subsets(x: Dictionary, n?: number): IterableIterator<object>;
/**
* Pick an arbitrary key.
* @param x an object
* @param fr random number generator ([0, 1))
* @returns kᵢ | [kᵢ, vᵢ] ∈ x
*/ export declare function randomKey(x: Dictionary, fr?: ReadFunction<number> | null): string;
export { randomKey as key };
/**
* Pick an arbitrary entry.
* @param x an object
* @param fr random number generator ([0, 1))
* @returns [kᵢ, vᵢ] | [kᵢ, vᵢ] ∈ x
` */ export declare function randomEntry(x: Dictionary, fr?: ReadFunction<number> | null): [string, unknown];
export { randomEntry as entry };
/**
* Pick an arbitrary subset.
* @param x an object
* @param n number of entries [-1 ⇒ any]
* @param fr random number generator ([0, 1))
* @returns \{[kᵢ, vᵢ], [kⱼ, vⱼ], ...\} | [kᵢ, vᵢ], [kⱼ, vⱼ], ... ∈ x; |\{[kᵢ, vᵢ], [kⱼ, vⱼ], ...\}| = |x| if n<0 else n
*/ export declare function randomSubset(x: Dictionary, n?: number, fr?: ReadFunction<number> | null): Dictionary;
export { randomSubset as subset };
/**
* Check if object has a key.
* @param x an object
* @param k search key
* @returns [k, *] ∈ x?
*/ export declare function has(x: Dictionary, k: string): boolean;
export { has as hasKey };
/**
* Check if object has a value.
* @param x an object
* @param v search value
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns [*, v] ∈ x?
*/ export declare function hasValue(x: Dictionary, v: unknown, fc?: CompareFunction | null, fm?: MapFunction | null): boolean;
/**
* Check if object has an entry.
* @param x an object
* @param e search entry ([k, v])
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns [k, v] ∈ x? | [k, v] = e
*/ export declare function hasEntry(x: Dictionary, e: [string, unknown], fc?: CompareFunction | null, fm?: MapFunction | null): boolean;
/**
* Check if object has a subset.
* @param x an object
* @param y search subset
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns y ⊆ x?
*/ export declare function hasSubset(x: Dictionary, y: Dictionary, fc?: CompareFunction | null, fm?: MapFunction | null): boolean;
/**
* Find value of an entry passing a test.
* @param x an object
* @param ft test function (v, k, x)
* @returns v | ft(v) = true; [k, v] ∈ x
*/ export declare function find(x: Dictionary, ft: TestFunction): unknown;
/**
* Find values of entries passing a test.
* @param x an object
* @param ft test function (v, k, x)
* @returns [vₒ, v₁, ...] | ft(vᵢ) = true; [kᵢ, vᵢ] ∈ x
*/ export declare function findAll(x: Dictionary, ft: TestFunction): unknown[];
/**
* Find key of an entry passing a test.
* @param x an object
* @param ft test function (v, k, x)
* @returns k | ft(x[k]) passes
*/ export declare function search(x: Dictionary, ft: TestFunction): string | null;
/**
* Find all keys of entries passing a test.
* @param x an object
* @param ft test function (v, k, x)
* @returns [k₀, k₁, ...] | ft(x[kᵢ]) passes
*/ export declare function searchAll(x: Dictionary, ft: TestFunction): string[];
/**
* Find key with a given value.
* @param x an object
* @param v search value
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns k | fm(x[k]) ≈ fm(v)
*/ export declare function searchValue(x: Dictionary, v: unknown, fc?: CompareFunction | null, fm?: MapFunction | null): string | null;
/**
* Find keys with a given value.
* @param x an object
* @param v search value
* @param fc compare function (a, b)
* @param fm map function (v, k, x)
* @returns [k₀, k₁, ...] | fm(x[kᵢ]) ≈ fm(v)
*/ export declare function searchValueAll(x: Dictionary, v: unknown, fc?: CompareFunction | null, fm?: MapFunction | null): string[];
/**
* Call a function for each entry.
* @param x an object
* @param fp called function (v, k, x)
*/ export declare function forEach(x: Dictionary, fp: ProcessFunction): void;
/**
* Check if any value satisfies a test.
* @param x an object
* @param ft test function (v, k, x)
* @returns true if ft(vᵢ) = true for some [kᵢ, vᵢ] ∈ x
*/ export declare function some(x: Dictionary, ft?: TestFunction | null): boolean;
/**
* Check if all values satisfy a test.
* @param x an object
* @param ft test function (v, k, x)
* @returns true if ft(vᵢ) = true for all [kᵢ, vᵢ] ∈ x
*/ export declare function every(x: Dictionary, ft: TestFunction): boolean;
/**
* Transform values of an object.
* @param x an object
* @param fm map function (v, k, x)
* @returns \{[k₀, fm(v₀)], [k₁, fm(v₁)], ...\} | [kᵢ, vᵢ] ∈ x
*/ export declare function map(x: Dictionary, fm: MapFunction): Dictionary;
/**
* Transform values of an object.
* @param x an object (updated)
* @param fm map function (v, k, x)
* @returns x = \{[k₀, fm(v₀)], [k₁, fm(v₁)], ...\} | [kᵢ, vᵢ] ∈ x
*/ export declare function map$(x: Dictionary, fm: MapFunction): Dictionary;
/**
* Reduce values to a single value.
* @param x an object
* @param fr reduce function (acc, v, k, x)
* @param acc initial value
* @returns fr(fr(acc, v₀), v₁)... | fr(acc, v₀) = v₀ if acc not given
*/ export declare function reduce(x: Dictionary, fr: ReduceFunction, acc?: unknown): unknown;
/**
* Keep entries which pass a test.
* @param x an object
* @param ft test function (v, k, x)
* @returns \{[k₀, v₀], [k₁, v₁], ...\} | ft(vᵢ) = true; [kᵢ, vᵢ] ∈ x
*/ export declare function filter(x: Dictionary, ft: TestFunction): Dictionary;
/**
* Keep entries which pass a test.
* @param x an object (updated)
* @param ft test function (v, k, x)
* @returns x = \{[k₀, v₀], [k₁, v₁], ...\} | ft(vᵢ) = true; [kᵢ, vᵢ] ∈ x
*/ export declare function filter$(x: Dictionary, ft: TestFunction): Dictionary;
/**
* Get object with given keys.
* @param x an object
* @param ks keys
* @returns \{[k₀, v₀], [k₁, v₁], ...\} | kᵢ ∈ ks; [kᵢ, vᵢ] ∈ x
*/ export declare function filterAt(x: Dictionary, ks: string[]): Dictionary;
/**
* Get object with given keys.
* @param x an object (updated)
* @param ks keys
* @returns x = \{[k₀, v₀], [k₁, v₁], ...\} | kᵢ ∈ ks; [kᵢ, vᵢ] ∈ x
*/ export declare function filterAt$(x: Dictionary, ks: string[]): Dictionary;
/**
* Discard entries which pass a test.
* @param x an object
* @param ft test function (v, k, x)
* @returns \{[k₀, v₀], [k₁, v₁], ...\} | ft(vᵢ) = false; [kᵢ, vᵢ] ∈ x
*/ export declare function reject(x: Dictionary, ft: TestFunction): Dictionary;
/**
* Discard entries which pass a test.
* @param x an object (updated)
* @param ft test function (v, k, x)
* @returns x = \{[k₀, v₀], [k₁, v₁], ...\} | ft(vᵢ) = false; [kᵢ, vᵢ] ∈ x
*/ export declare function reject$(x: Dictionary, ft: TestFunction): Dictionary;
/**
* Get object without given keys.
* @param x an object
* @param ks keys
* @returns \{[k₀, v₀], [k₁, v₁], ...\} | kᵢ ∉ ks; [kᵢ, vᵢ] ∈ x
*/ export declare function rejectAt(x: Dictionary, ks: string[]): Dictionary;
/**
* Get object without given keys.
* @param x an object (updated)
* @param ks keys
* @returns x = \{[k₀, v₀], [k₁, v₁], ...\} | kᵢ ∉ ks; [kᵢ, vᵢ] ∈ x
*/ export declare function rejectAt$(x: Dictionary, ks: string[]): Dictionary;
/**
* Flatten nested object to given depth.
* @param x a nested object
* @param n maximum depth [-1 ⇒ all]
* @param fm map function (v, k, x)
* @param ft test function for flatten (v, k, x)
* @returns flat map
*/ export declare function flat(x: Dictionary, n?: number, fm?: MapFunction | null, ft?: TestFunction | null): Dictionary;
/**
* Flatten nested object, using map function.
* @param x a nested object
* @param fm map function (v, k, x)
* @param ft test function (v, k, x)
* @returns flat map
*/ export declare function flatMap(x: Dictionary, fm?: MapFunction | null, ft?: TestFunction | null): Dictionary;
/**
* Combine matching entries from objects.
* @param xs objects
* @param fm map function (vs, k)
* @param fe end function (dones) [array.some]
* @param vd default value
* @returns \{"k₀": fm([x₀[k₀], x₁[k₀], ...]), "k₁": fm([x₀[k₁], x₁[k₁], ...]), ...\}
*/ export declare function zip(xs: Dictionary[], fm?: MapFunction | null, fe?: EndFunction | null, vd?: unknown): Dictionary;
/**
* Segregate entries by test result.
* @param x an object
* @param ft test function (v, k, x)
* @returns [satisfies, doesnt]
*/ export declare function partition(x: Dictionary, ft: TestFunction): [object, object];
/**
* Segregate entries by similarity.
* @param x an object
* @param fm map function (v, k, x)
* @returns Map \{key ⇒ values\}
*/ export declare function partitionAs(x: Dictionary, fm: MapFunction): Map<unknown, object>;
/**
* Break object into chunks of given size.
* @param x an object
* @param n chunk size [1]
* @param s chunk step [n]
* @returns [x[0..n], x[s..s+n], x[2s..2s+n], ...]
*/ export declare function chunk(x: Dictionary, n?: number, s?: number): Dictionary[];
/**
* Combine entries from objects, preferring last.
* @param xs objects
* @returns x₀ ∪ x₁ ∪ ... | [x₀, x₁, ...] = xs
*/ export declare function concat(...xs: Dictionary[]): Dictionary;
/**
* Combines entries from objects, preferring last.
* @param x an object (updated)
* @param ys other objects
* @returns x = x ∪ y₀ ∪ y₁ ∪ ... | [y₀, y₁, ...] = ys
*/ export declare function concat$(x: Dictionary, ...ys: Dictionary[]): Dictionary;
/**
* Join entries together into a string.
* @param x an object
* @param sep separator [,]
* @param asc associator [=]
* @returns "k₀=v₀,k₁=v₁,..." | [kᵢ, vᵢ] ∈ x
*/ export declare function join(x: Dictionary, sep?: string, asc?: string): string;
/**
* Check if objects have no common keys.
* @param x an object
* @param y another object
* @returns x ∩ y = Φ?
*/ export declare function isDisjoint(x: Dictionary, y: Dictionary): boolean;
/**
* Obtain keys present in any object.
* @param xs objects
* @returns [k₀, k₁, ...] | [kᵢ, vᵢ] ∈ x₀ ∪ x₁, ...; [x₀, x₁, ...] = xs
*/ export declare function unionKeys(...xs: Dictionary[]): Set<string>;
/**
* Obtain entries present in any object.
* @param x an object
* @param y another object
* @param fc combine function (a, b)
* @returns x ∪ y = \{[kᵢ, vᵢ] | [kᵢ, vᵢ] ∈ x or [kᵢ, vᵢ] ∈ y\}
*/ export declare function union(x: Dictionary, y: Dictionary, fc?: CombineFunction | null): Dictionary;
/**
* Obtain entries present in any object.
* @param x an object (updated)
* @param y another object
* @param fc combine function (a, b)
* @returns x = x ∪ y = \{[kᵢ, vᵢ] | [kᵢ, vᵢ] ∈ x or [kᵢ, vᵢ] ∈ y\}
*/ export declare function union$(x: Dictionary, y: Dictionary, fc?: CombineFunction | null): Dictionary;
/**
* Obtain keys present in all objects.
* @param xs objects
* @returns [k₀, k₁, ...] | [kᵢ, vᵢ] ∈ x₀ ∩ x₁, ...; [x₀, x₁, ...] = xs
*/ export declare function intersectionKeys(...xs: Dictionary[]): Set<string>;
/**
* Obtain entries present in both objects.
* @param x an object
* @param y another object
* @param fc combine function (a, b)
* @returns x ∩ y = \{[kᵢ, vᵢ] | [kᵢ, vᵢ] ∈ x and [kᵢ, vᵢ] ∈ y\}
*/ export declare function intersection(x: Dictionary, y: Dictionary, fc?: CombineFunction | null): Dictionary;
/**
* Obtain entries present in both objects.
* @param x an object (updated)
* @param y another object
* @param fc combine function (a, b)
* @returns x = x ∩ y = \{[kᵢ, vᵢ] | [kᵢ, vᵢ] ∈ x and [kᵢ, vᵢ] ∈ y\}
*/ export declare function intersection$(x: Dictionary, y: Dictionary, fc?: CombineFunction | null): Dictionary;
/**
* Obtain entries not present in another object.
* @param x an object
* @param y another object
* @returns x - y = \{[kᵢ, vᵢ] | [kᵢ, vᵢ] ∈ x, [kᵢ, *] ∉ y\}
*/ export declare function difference(x: Dictionary, y: Dictionary): Dictionary;
/**
* Obtain entries not present in another object.
* @param x an object (updated)
* @param y another object
* @returns x = x - y = \{[kᵢ, vᵢ] | [kᵢ, vᵢ] ∈ x, [kᵢ, *] ∉ y\}
*/ export declare function difference$(x: Dictionary, y: Dictionary): Dictionary;
/**
* Obtain entries not present in both objects.
* @param x an object
* @param y another object
* @returns x-y ∪ y-x
*/ export declare function symmetricDifference(x: Dictionary, y: Dictionary): Dictionary;
/**
* Obtain entries not present in both objects.
* @param x an object (updated)
* @param y another object
* @returns x = x-y ∪ y-x
*/ export declare function symmetricDifference$(x: Dictionary, y: Dictionary): Dictionary;
/**
* List cartesian product of objects.
* @param xs objects
* @param fm map function (vs)
* @returns x₀ × x₁ × ... = \{\{[k₀, v₀], [k₁, v₁], ...\} | [k₀, v₀] ∈ x₀, [k₁, v₁] ∈ x₁, ...]\}
*/ export declare function cartesianProduct(xs: Dictionary[], fm?: MapFunction | null): IterableIterator<unknown>;