/** * This file contains the ReadonlyMap algebraic data type. ReadonlyMap is a * built in data structure in javascript that allows the association of * arbitrary key anv value pairs. Generally, keys in a ReadonlyMap are only * equal if their memory addresses are equal. This means that while strings and * numbers work as expected as keys, complex objects such as [1] or { one: 1 } * do not. Thus, there are many utility functions in this file that allow one to * specify how to determine equality for keys in a ReadonlyMap. * * @module ReadonlyMap * @since 2.0.0 */ import "./_dnt.polyfills.js"; import type { Kind, Out } from "./kind.js"; import type { Bimappable } from "./bimappable.js"; import type { Combinable } from "./combinable.js"; import type { Comparable } from "./comparable.js"; import type { Flatmappable } from "./flatmappable.js"; import type { Foldable } from "./foldable.js"; import type { Initializable } from "./initializable.js"; import type { Mappable } from "./mappable.js"; import type { Option } from "./option.js"; import type { Showable } from "./showable.js"; import type { Sortable } from "./sortable.js"; /** * @since 2.0.0 */ export interface KindReadonlyMap extends Kind { readonly kind: ReadonlyMap, Out>; } /** * @since 2.0.0 */ export interface KindKeyedReadonlyMap extends Kind { readonly kind: ReadonlyMap>; } /** * @since 2.0.0 */ export type TypeOf = U extends ReadonlyMap ? A : never; /** * @since 2.0.0 */ export type KeyOf = U extends ReadonlyMap ? B : never; /** * @since 2.0.0 */ export declare function init(): ReadonlyMap; /** * @since 2.0.0 */ export declare function singleton(k: K, a: A): ReadonlyMap; /** * @since 2.0.0 */ export declare function isEmpty(ta: ReadonlyMap): boolean; /** * @since 2.0.0 */ export declare function readonlyMap(...pairs: [K, A][]): ReadonlyMap; /** * @since 2.0.0 */ export declare function map(fai: (a: A) => I): (ta: ReadonlyMap) => ReadonlyMap; /** * @since 2.0.0 */ export declare function bimap(fbj: (b: B) => J, fai: (a: A) => I): (ta: ReadonlyMap) => ReadonlyMap; /** * @since 2.0.0 */ export declare function mapSecond(fbj: (b: B) => J): (ta: ReadonlyMap) => ReadonlyMap; /** * @since 2.0.0 */ export declare function size(d: ReadonlyMap): number; /** * @since 2.0.0 */ export declare function lookupWithKey(S: Comparable): (k: K) => (ta: ReadonlyMap) => Option<[K, A]>; /** * @since 2.0.0 */ export declare function lookup(S: Comparable): (k: K) => (ta: ReadonlyMap) => Option; /** * @since 2.0.0 */ export declare function member(S: Comparable): (k: K) => (ta: ReadonlyMap) => boolean; /** * @since 2.0.0 */ export declare function elem(S: Comparable): (a: A) => (m: ReadonlyMap) => boolean; /** * @since 2.0.0 */ export declare function entries(O: Sortable): (ta: ReadonlyMap) => ReadonlyArray<[B, A]>; /** * @since 2.0.0 */ export declare function keys(O: Sortable): (ta: ReadonlyMap) => K[]; /** * @since 2.0.0 */ export declare function values(O: Sortable): (ta: ReadonlyMap) => A[]; /** * @since 2.0.0 */ export declare function fold(foldr: (accumulator: O, value: A, key: B) => O, initial: O): (ua: ReadonlyMap) => O; /** * @since 2.0.0 */ export declare function collect(O: Sortable): (fai: (b: B, a: A) => I) => (ta: ReadonlyMap) => ReadonlyArray; /** * @since 2.0.0 */ export declare function deleteAt(S: Comparable): (key: B) => (map: ReadonlyMap) => ReadonlyMap; /** * @since 2.0.0 */ export declare function insert(S: Comparable): (value: A) => (key: B) => (map: ReadonlyMap) => ReadonlyMap; /** * @since 2.0.0 */ export declare function insertAt(S: Comparable): (key: B) => (value: A) => (map: ReadonlyMap) => ReadonlyMap; /** * @since 2.0.0 */ export declare function modify(S: Comparable): (modifyFn: (a: A) => A) => (key: B) => (ta: ReadonlyMap) => ReadonlyMap; /** * @since 2.0.0 */ export declare function modifyAt(S: Comparable): (key: B) => (modifyFn: (value: A) => A) => (map: ReadonlyMap) => ReadonlyMap; /** * @since 2.0.0 */ export declare function update(S: Comparable): (value: A) => (key: B) => (map: ReadonlyMap) => ReadonlyMap; /** * @since 2.0.0 */ export declare function updateAt(S: Comparable): (key: B) => (value: A) => (map: ReadonlyMap) => ReadonlyMap; /** * @since 2.0.0 */ export declare function pop(S: Comparable): (b: B) => (ta: ReadonlyMap) => Option<[A, ReadonlyMap]>; /** * @since 2.0.0 */ export declare function isSubmap(SK: Comparable, SA: Comparable): (second: ReadonlyMap) => (first: ReadonlyMap) => boolean; /** * @since 2.0.0 */ export declare function getFlatmappableReadonlyMap({ init, combine }: Initializable): Flatmappable>; /** * @since 2.0.0 */ export declare function getComparable(SK: Comparable, SA: Comparable): Comparable>; /** * @since 2.0.0 */ export declare function getCombinable(SK: Comparable, SA: Combinable): Combinable>; /** * @since 2.0.0 */ export declare function getShowable(SK: Showable, SA: Showable): Showable>; /** * @since 2.0.0 */ export declare const MappableMap: Mappable; /** * @since 2.0.0 */ export declare const BimappableMap: Bimappable; /** * @since 2.0.0 */ export declare const FoldableMap: Foldable;