import type { Equal } from "../../../../Equal/index.js"; import * as O from "../../../../Option/index.js"; export declare type Node = LeafNode | CollisionNode | IndexedNode | Empty | ArrayNode; export interface SizeRef { value: number; } export declare class Empty { readonly _tag = "Empty"; modify(edit: number, _shift: number, f: UpdateFn, hash: number, key: K, size: SizeRef): Node; } export declare function isEmptyNode(a: unknown): a is Empty; export declare function isLeaf(node: Node): node is Empty | LeafNode | CollisionNode; export declare function canEditNode(edit: number, node: Node): boolean; export declare type KeyEq = Equal["equals"]; export declare type UpdateFn = (v: O.Option) => O.Option; export declare class LeafNode { readonly edit: number; readonly hash: number; readonly key: K; value: O.Option; readonly _tag = "LeafNode"; constructor(edit: number, hash: number, key: K, value: O.Option); modify(edit: number, shift: number, f: UpdateFn, hash: number, key: K, size: SizeRef): Node; } export declare class CollisionNode { readonly edit: number; readonly hash: number; readonly children: Array>; readonly _tag = "CollisionNode"; constructor(edit: number, hash: number, children: Array>); modify(edit: number, shift: number, f: UpdateFn, hash: number, key: K, size: SizeRef): Node; updateCollisionList(mutate: boolean, edit: number, hash: number, list: Node[], f: UpdateFn, key: K, size: SizeRef): Node[]; } export declare class IndexedNode { readonly edit: number; mask: number; children: Node[]; readonly _tag = "IndexedNode"; constructor(edit: number, mask: number, children: Node[]); modify(edit: number, shift: number, f: UpdateFn, hash: number, key: K, size: SizeRef): Node; } export declare class ArrayNode { readonly edit: number; size: number; children: Node[]; readonly _tag = "ArrayNode"; constructor(edit: number, size: number, children: Node[]); modify(edit: number, shift: number, f: UpdateFn, hash: number, key: K, size: SizeRef): Node; } //# sourceMappingURL=index.d.ts.map