type ('key, +'value, 'cmp) t = ('key, 'value, 'cmp) Base.Map.ttype ('k, 'cmp) comparator = (module Comparator.S with type comparator_witness = 'cmp and type t = 'k)val invariants : (_, _, _) t -> Base.Bool.tTest if invariants of internal AVL search tree hold.
val comparator : ('a, _, 'cmp) t -> ('a, 'cmp) Comparator.tval comparator_s : ('a, _, 'cmp) t -> ('a, 'cmp) comparatorval empty : ('a, 'cmp) comparator -> ('a, 'b, 'cmp) tThe empty map.
val singleton : ('a, 'cmp) comparator -> 'a -> 'b -> ('a, 'b, 'cmp) tMap with one (key, data) pair.
val of_alist : ('a, 'cmp) comparator -> ('a * 'b) Base.List.t -> [ `Ok of ('a, 'b, 'cmp) t | `Duplicate_key of 'a ]Creates map from an association list with unique keys.
val of_alist_or_error : ('a, 'cmp) comparator -> ('a * 'b) Base.List.t -> ('a, 'b, 'cmp) t Or_error.tCreates map from an association list with unique keys. Returns an error if duplicate 'a keys are found.
val of_alist_exn : ('a, 'cmp) comparator -> ('a * 'b) Base.List.t -> ('a, 'b, 'cmp) tCreates map from an association list with unique keys. Raises an exception if duplicate 'a keys are found.
val of_hashtbl_exn : ('a, 'cmp) comparator -> ('a, 'b) Hashtbl.t -> ('a, 'b, 'cmp) tof_hashtbl_exn creates a map from bindings present in a hash table. of_hashtbl_exn raises if there are distinct keys a1 and a2 in the table with comparator.compare a1 a2 = 0, which is only possible if the hash-table comparison function is different than comparator.compare. In the common case, the comparison is the same, in which case of_hashtbl_exn does not raise, regardless of the keys present in the table.
val of_alist_multi : ('a, 'cmp) comparator -> ('a * 'b) Base.List.t -> ('a, 'b Base.List.t, 'cmp) tCreates map from an association list with possibly repeated keys.
val of_alist_fold : ('a, 'cmp) comparator -> ('a * 'b) Base.List.t -> init:'c -> f:('c -> 'b -> 'c) -> ('a, 'c, 'cmp) tCombines an association list into a map, folding together bound values with common keys.
val of_alist_reduce : ('a, 'cmp) comparator -> ('a * 'b) Base.List.t -> f:('b -> 'b -> 'b) -> ('a, 'b, 'cmp) tCombines an association list into a map, reducing together bound values with common keys.
val of_iteri : ('a, 'cmp) comparator -> iteri:(f:(key:'a -> data:'b -> Base.Unit.t) -> Base.Unit.t) -> [ `Ok of ('a, 'b, 'cmp) t | `Duplicate_key of 'a ]of_iteri ~iteri behaves like of_alist, except that instead of taking a concrete datastruture, it takes an iteration function. For instance, to convert a string table into a map: of_iteri (module String) ~f:(Hashtbl.iteri table). It is faster than adding the elements one by one.
Trees
module Tree : sig ... endval of_tree : ('k, 'cmp) comparator -> ('k, 'v, 'cmp) Tree.t -> ('k, 'v, 'cmp) tCreates a t from a Tree.t and a Comparator.t. This is an O(n) operation as it must discover the length of the Tree.t.
More interface
val of_sorted_array : ('a, 'cmp) comparator -> ('a * 'b) Base.Array.t -> ('a, 'b, 'cmp) t Or_error.tCreates map from a sorted array of key-data pairs. The input array must be sorted, as given by the relevant comparator (either in ascending or descending order), and must not contain any duplicate keys. If either of these conditions does not hold, an error is returned.
val of_sorted_array_unchecked : ('a, 'cmp) comparator -> ('a * 'b) Base.Array.t -> ('a, 'b, 'cmp) tLike of_sorted_array except it returns a map with broken invariants when an Error would have been returned.
val of_increasing_iterator_unchecked : ('a, 'cmp) comparator -> len:Base.Int.t -> f:(Base.Int.t -> 'a * 'b) -> ('a, 'b, 'cmp) tof_increasing_iterator_unchecked c ~len ~f behaves like of_sorted_array_unchecked c (Array.init len ~f), with the additional restriction that a decreasing order is not supported. The advantage is not requiring you to allocate an intermediate array. f will be called with 0, 1, ... len - 1, in order.
val of_increasing_sequence : ('k, 'cmp) comparator -> ('k * 'v) Sequence.t -> ('k, 'v, 'cmp) t Or_error.tof_increasing_sequence c seq behaves like of_sorted_array c
(Sequence.to_array seq), but does not allocate the intermediate array.
The sequence will be folded over once, and the additional time complexity is O(n).
val of_sequence : ('k, 'cmp) comparator -> ('k * 'v) Sequence.t -> [ `Ok of ('k, 'v, 'cmp) t | `Duplicate_key of 'k ]Creates a map from an association sequence with unique keys.
of_sequence c seq behaves like of_alist c (Sequence.to_list seq) but does not allocate the intermediate list.
If your sequence is increasing, use of_increasing_sequence for better performance.
val of_sequence_or_error : ('a, 'cmp) comparator -> ('a * 'b) Sequence.t -> ('a, 'b, 'cmp) t Or_error.tCreates a map from an association sequence with unique keys, returning an error if duplicate 'a keys are found.
of_sequence_or_error c seq behaves like of_alist_or_error c (Sequence.to_list seq) but does not allocate the intermediate list.
val of_sequence_exn : ('a, 'cmp) comparator -> ('a * 'b) Sequence.t -> ('a, 'b, 'cmp) tCreates a map from an association sequence with unique keys, raising an exception if duplicate 'a keys are found.
of_sequence_exn c seq behaves like of_alist_exn c (Sequence.to_list seq) but does not allocate the intermediate list.
val of_sequence_multi : ('a, 'cmp) comparator -> ('a * 'b) Sequence.t -> ('a, 'b Base.List.t, 'cmp) tCreates a map from an association sequence with possibly repeated keys. The values in the map for a given key appear in the same order as they did in the association list.
of_sequence_multi c seq behaves like of_alist_multi c (Sequence.to_list seq) but does not allocate the intermediate list.
val of_sequence_fold : ('a, 'cmp) comparator -> ('a * 'b) Sequence.t -> init:'c -> f:('c -> 'b -> 'c) -> ('a, 'c, 'cmp) tCombines an association sequence into a map, folding together bound values with common keys.
of_sequence_fold c seq ~init ~f behaves like of_alist_fold c (Sequence.to_list seq) ~init ~f but does not allocate the intermediate list.
val of_sequence_reduce : ('a, 'cmp) comparator -> ('a * 'b) Sequence.t -> f:('b -> 'b -> 'b) -> ('a, 'b, 'cmp) tCombines an association sequence into a map, reducing together bound values with common keys.
of_sequence_reduce c seq ~f behaves like of_alist_reduce c (Sequence.to_list seq) ~f but does not allocate the intermediate list.
val is_empty : (_, _, _) t -> Base.Bool.tTests whether a map is empty or not.
val length : (_, _, _) t -> Base.Int.tlength map returns number of elements in map. O(1), but Tree.length is O(n).
val add : ('k, 'v, 'cmp) t -> key:'k -> data:'v -> ('k, 'v, 'cmp) t Map_intf.Or_duplicate.tadd_exn t ~key ~data returns t extended with key mapped to data, raising if mem key t.
Returns a new map with the specified new binding; if the key was already bound, its previous binding disappears.
val add_multi : ('k, 'v Base.List.t, 'cmp) t -> key:'k -> data:'v -> ('k, 'v Base.List.t, 'cmp) tIf key is not present then add a singleton list, otherwise, cons data onto the head of the existing list.
val remove_multi : ('k, 'v Base.List.t, 'cmp) t -> 'k -> ('k, 'v Base.List.t, 'cmp) tIf k is present then remove its head element; if result is empty, remove the key.
val find_multi : ('k, 'v Base.List.t, 'cmp) t -> 'k -> 'v Base.List.tfind_multi t key returns t's values for key if key is present in the table, and returns the empty list otherwise.
val change : ('k, 'v, 'cmp) t -> 'k -> f:('v Base.Option.t -> 'v Base.Option.t) -> ('k, 'v, 'cmp) tchange t key ~f returns a new map m that is the same as t on all keys except for key, and whose value for key is defined by f, i.e., find m key = f (find t
key).
val update : ('k, 'v, 'cmp) t -> 'k -> f:('v Base.Option.t -> 'v) -> ('k, 'v, 'cmp) tupdate t key ~f is change t key ~f:(fun o -> Some (f o)).
val find : ('k, 'v, 'cmp) t -> 'k -> 'v Base.Option.tReturns the value bound to the given key if it exists, and None otherwise.
val find_exn : ('k, 'v, 'cmp) t -> 'k -> 'vReturns the value bound to the given key, raising Caml.Not_found or Not_found_s if none exists.
val find_or_error : ('k, 'v, 'cmp) t -> 'k -> 'v Or_error.tReturns a new map with any binding for the key in question removed.
val mem : ('k, _, 'cmp) t -> 'k -> Base.Bool.tmem map key tests whether map contains a binding for key.
val iter_keys : ('k, _, _) t -> f:('k -> Base.Unit.t) -> Base.Unit.tval iter : (_, 'v, _) t -> f:('v -> Base.Unit.t) -> Base.Unit.tval iteri : ('k, 'v, _) t -> f:(key:'k -> data:'v -> Base.Unit.t) -> Base.Unit.tmodule Continue_or_stop : sig ... endmodule Finished_or_unfinished : sig ... endval iteri_until : ('k, 'v, _) t -> f:(key:'k -> data:'v -> Continue_or_stop.t) -> Finished_or_unfinished.tIterates until f returns Stop. If f returns Stop, the final result is Unfinished. Otherwise, the final result is Finished.
val iter2 : ('k, 'v1, 'cmp) t -> ('k, 'v2, 'cmp) t -> f:(key:'k -> data:[ `Left of 'v1 | `Right of 'v2 | `Both of 'v1 * 'v2 ] -> Base.Unit.t) -> Base.Unit.tIterates two maps side by side. The complexity of this function is O(M+N). If two inputs are [(0, a); (1, a)] and [(1, b); (2, b)], f will be called with [(0, `Left a); (1, `Both (a, b)); (2, `Right b)]
Returns new map with bound values replaced by the result of f applied to them.
Like map, but f takes both key and data as arguments.
val fold : ('k, 'v, _) t -> init:'a -> f:(key:'k -> data:'v -> 'a -> 'a) -> 'aFolds over keys and data in map in increasing order of key.
val fold_right : ('k, 'v, _) t -> init:'a -> f:(key:'k -> data:'v -> 'a -> 'a) -> 'aFolds over keys and data in map in decreasing order of key.
val fold2 : ('k, 'v1, 'cmp) t -> ('k, 'v2, 'cmp) t -> init:'a -> f:(key:'k -> data:[ `Left of 'v1 | `Right of 'v2 | `Both of 'v1 * 'v2 ] -> 'a -> 'a) -> 'aFolds over two maps side by side, like iter2.
val filter_keys : ('k, 'v, 'cmp) t -> f:('k -> Base.Bool.t) -> ('k, 'v, 'cmp) tval filter : ('k, 'v, 'cmp) t -> f:('v -> Base.Bool.t) -> ('k, 'v, 'cmp) tval filteri : ('k, 'v, 'cmp) t -> f:(key:'k -> data:'v -> Base.Bool.t) -> ('k, 'v, 'cmp) tval filter_map : ('k, 'v1, 'cmp) t -> f:('v1 -> 'v2 Base.Option.t) -> ('k, 'v2, 'cmp) tReturns new map with bound values filtered by the result of f applied to them.
val filter_mapi : ('k, 'v1, 'cmp) t -> f:(key:'k -> data:'v1 -> 'v2 Base.Option.t) -> ('k, 'v2, 'cmp) tLike filter_map, but function takes both key and data as arguments.
val partition_mapi : ('k, 'v1, 'cmp) t -> f:(key:'k -> data:'v1 -> [ `Fst of 'v2 | `Snd of 'v3 ]) -> ('k, 'v2, 'cmp) t * ('k, 'v3, 'cmp) tpartition_mapi t ~f returns two new ts, with each key in t appearing in exactly one of the result maps depending on its mapping in f.
val partition_map : ('k, 'v1, 'cmp) t -> f:('v1 -> [ `Fst of 'v2 | `Snd of 'v3 ]) -> ('k, 'v2, 'cmp) t * ('k, 'v3, 'cmp) tpartition_map t ~f = partition_mapi t ~f:(fun ~key:_ ~data -> f data)
val partitioni_tf : ('k, 'v, 'cmp) t -> f:(key:'k -> data:'v -> Base.Bool.t) -> ('k, 'v, 'cmp) t * ('k, 'v, 'cmp) tpartitioni_tf t ~f
=
partition_mapi t ~f:(fun ~key ~data ->
if f ~key ~data
then `Fst data
else `Snd data)val partition_tf : ('k, 'v, 'cmp) t -> f:('v -> Base.Bool.t) -> ('k, 'v, 'cmp) t * ('k, 'v, 'cmp) tpartition_tf t ~f = partitioni_tf t ~f:(fun ~key:_ ~data -> f data)
val compare_direct : ('v -> 'v -> Base.Int.t) -> ('k, 'v, 'cmp) t -> ('k, 'v, 'cmp) t -> Base.Int.tTotal ordering between maps. The first argument is a total ordering used to compare data associated with equal keys in the two maps.
val hash_fold_direct : 'k Base.Hash.folder -> 'v Base.Hash.folder -> ('k, 'v, 'cmp) t Base.Hash.folderHash function: a building block to use when hashing data structures containing maps in them. hash_fold_direct hash_fold_key is compatible with compare_direct iff hash_fold_key is compatible with (comparator m).compare of the map m being hashed.
val equal : ('v -> 'v -> Base.Bool.t) -> ('k, 'v, 'cmp) t -> ('k, 'v, 'cmp) t -> Base.Bool.tequal cmp m1 m2 tests whether the maps m1 and m2 are equal, that is, contain equal keys and associate them with equal data. cmp is the equality predicate used to compare the data associated with the keys.
val keys : ('k, _, _) t -> 'k Base.List.tReturns list of keys in map.
val data : (_, 'v, _) t -> 'v Base.List.tReturns list of data in map.
val to_alist : ?key_order:[ `Increasing | `Decreasing ] -> ('k, 'v, _) t -> ('k * 'v) Base.List.tCreates association list from map.
- parameter key_order
default is
`Increasing
val validate : name:('k -> Base.String.t) -> 'v Base.Validate.check -> ('k, 'v, _) t Base.Validate.checkAdditional operations on maps
val merge : ('k, 'v1, 'cmp) t -> ('k, 'v2, 'cmp) t -> f:(key:'k -> [ `Left of 'v1 | `Right of 'v2 | `Both of 'v1 * 'v2 ] -> 'v3 Base.Option.t) -> ('k, 'v3, 'cmp) tMerges two maps. The runtime is O(length(t1) + length(t2)). In particular, you shouldn't use this function to merge a list of maps. Consider using merge_skewed instead.
val merge_skewed : ('k, 'v, 'cmp) t -> ('k, 'v, 'cmp) t -> combine:(key:'k -> 'v -> 'v -> 'v) -> ('k, 'v, 'cmp) tA special case of merge, merge_skewed t1 t2 is a map containing all the bindings of t1 and t2. Bindings that appear in both t1 and t2 are merged using the combine function. In a call combine ~key v1 v2 the value v1 comes from t1 and v2 from t2.
The runtime of merge_skewed is O(l1 * log(l2)), where l1 is the length of the smaller map and l2 the length of the larger map. This is likely to be faster than merge when one of the maps is a lot smaller, or when you merge a list of maps.
module Symmetric_diff_element : sig ... endval symmetric_diff : ('k, 'v, 'cmp) t -> ('k, 'v, 'cmp) t -> data_equal:('v -> 'v -> Base.Bool.t) -> ('k, 'v) Symmetric_diff_element.t Sequence.tsymmetric_diff t1 t2 ~data_equal returns a list of changes between t1 and t2. It is intended to be efficient in the case where t1 and t2 share a large amount of structure. The keys in the output sequence will be in sorted order.
val fold_symmetric_diff : ('k, 'v, 'cmp) t -> ('k, 'v, 'cmp) t -> data_equal:('v -> 'v -> Base.Bool.t) -> init:'a -> f:('a -> ('k, 'v) Symmetric_diff_element.t -> 'a) -> 'afold_symmetric_diff t1 t2 ~data_equal folds across an implicit sequence of changes between t1 and t2, in sorted order by keys. Equivalent to Sequence.fold (symmetric_diff t1 t2 ~data_equal), and more efficient.
val min_elt : ('k, 'v, _) t -> ('k * 'v) Base.Option.tmin_elt map returns Some (key, data) pair corresponding to the minimum key in map, None if map is empty.
val min_elt_exn : ('k, 'v, _) t -> 'k * 'vval max_elt : ('k, 'v, _) t -> ('k * 'v) Base.Option.tmax_elt map returns Some (key, data) pair corresponding to the maximum key in map, and None if map is empty.
val max_elt_exn : ('k, 'v, _) t -> 'k * 'vval for_all : ('k, 'v, _) t -> f:('v -> Base.Bool.t) -> Base.Bool.tval for_alli : ('k, 'v, _) t -> f:(key:'k -> data:'v -> Base.Bool.t) -> Base.Bool.tval exists : ('k, 'v, _) t -> f:('v -> Base.Bool.t) -> Base.Bool.tval existsi : ('k, 'v, _) t -> f:(key:'k -> data:'v -> Base.Bool.t) -> Base.Bool.tval count : ('k, 'v, _) t -> f:('v -> Base.Bool.t) -> Base.Int.tval counti : ('k, 'v, _) t -> f:(key:'k -> data:'v -> Base.Bool.t) -> Base.Int.tval split : ('k, 'v, 'cmp) t -> 'k -> ('k, 'v, 'cmp) t * ('k * 'v) Base.Option.t * ('k, 'v, 'cmp) tsplit t key returns a map of keys strictly less than key, the mapping of key if any, and a map of keys strictly greater than key.
Runtime is O(m + log n) where n is the size of the input map, and m is the size of the smaller of the two output maps. The O(m) term is due to the need to calculate the length of the output maps. *
val append : lower_part:('k, 'v, 'cmp) t -> upper_part:('k, 'v, 'cmp) t -> [ `Ok of ('k, 'v, 'cmp) t | `Overlapping_key_ranges ]append ~lower_part ~upper_part returns `Ok map where map contains all the (key,
value) pairs from the two input maps if all the keys from lower_part are less than all the keys from upper_part. Otherwise it returns `Overlapping_key_ranges.
Runtime is O(log n) where n is the size of the larger input map. This can be significantly faster than Map.merge or repeated Map.add.
assert (match Map.append ~lower_part ~upper_part with
| `Ok whole_map ->
whole_map
= Map.(of_alist_exn (List.append (to_alist lower_part) (to_alist upper_part)))
| `Overlapping_key_ranges -> true);val subrange : ('k, 'v, 'cmp) t -> lower_bound:'k Maybe_bound.t -> upper_bound:'k Maybe_bound.t -> ('k, 'v, 'cmp) tsubrange t ~lower_bound ~upper_bound returns a map containing all the entries from t whose keys lie inside the interval indicated by ~lower_bound and ~upper_bound. If this interval is empty, an empty map is returned.
Runtime is O(m + log n) where n is the size of the input map, and m is the size of the output map. The O(m) term is due to the need to calculate the length of the output map.
val fold_range_inclusive : ('k, 'v, 'cmp) t -> min:'k -> max:'k -> init:'a -> f:(key:'k -> data:'v -> 'a -> 'a) -> 'afold_range_inclusive t ~min ~max ~init ~f folds f (with initial value ~init) over all keys (and their associated values) that are in the range [min, max] (inclusive).
val range_to_alist : ('k, 'v, 'cmp) t -> min:'k -> max:'k -> ('k * 'v) Base.List.trange_to_alist t ~min ~max returns an associative list of the elements whose keys lie in [min, max] (inclusive), with the smallest key being at the head of the list.
val closest_key : ('k, 'v, 'cmp) t -> [ `Greater_or_equal_to | `Greater_than | `Less_or_equal_to | `Less_than ] -> 'k -> ('k * 'v) Base.Option.tclosest_key t dir k returns the (key, value) pair in t with key closest to k, which satisfies the given inequality bound.
For example, closest_key t `Less_than k would be the pair with the closest key to k where key < k.
to_sequence can be used to get the same results as closest_key. It is less efficient for individual lookups but more efficient for finding many elements starting at some value.
val nth : ('k, 'v, _) t -> Base.Int.t -> ('k * 'v) Base.Option.tnth t n finds the (key, value) pair of rank n (i.e., such that there are exactly n keys strictly less than the found key), if one exists. O(log(length t) + n) time.
val nth_exn : ('k, 'v, _) t -> Base.Int.t -> 'k * 'vval rank : ('k, 'v, 'cmp) t -> 'k -> Base.Int.t Base.Option.trank t k if k is in t, returns the number of keys strictly less than k in t, otherwise None.
val to_sequence : ?order:[ `Increasing_key | `Decreasing_key ] -> ?keys_greater_or_equal_to:'k -> ?keys_less_or_equal_to:'k -> ('k, 'v, 'cmp) t -> ('k * 'v) Sequence.tto_sequence ?order ?keys_greater_or_equal_to ?keys_less_or_equal_to t gives a sequence of key-value pairs between keys_less_or_equal_to and keys_greater_or_equal_to inclusive, presented in order. If keys_greater_or_equal_to > keys_less_or_equal_to, the sequence is empty. Cost is O(log n) up front and amortized O(1) to produce each element.
- parameter order
`Increasing_keyis the default
val binary_search : ('k, 'v, 'cmp) t -> compare:(key:'k -> data:'v -> 'key -> Base.Int.t) -> [ `Last_strictly_less_than | `Last_less_than_or_equal_to | `Last_equal_to | `First_equal_to | `First_greater_than_or_equal_to | `First_strictly_greater_than ] -> 'key -> ('k * 'v) Base.Option.tbinary_search t ~compare which elt returns the (key, value) pair in t specified by compare and which, if one exists.
t must be sorted in increasing order according to compare, where compare and elt divide t into three (possibly empty) segments:
| < elt | = elt | > elt |
binary_search returns an element on the boundary of segments as specified by which. See the diagram below next to the which variants.
binary_search does not check that compare orders t, and behavior is unspecified if compare doesn't order t. Behavior is also unspecified if compare mutates t.
val binary_search_segmented : ('k, 'v, 'cmp) t -> segment_of:(key:'k -> data:'v -> [ `Left | `Right ]) -> [ `Last_on_left | `First_on_right ] -> ('k * 'v) Base.Option.tbinary_search_segmented t ~segment_of which takes a segment_of function that divides t into two (possibly empty) segments:
| segment_of elt = `Left | segment_of elt = `Right |
binary_search_segmented returns the (key, value) pair on the boundary of the segments as specified by which: `Last_on_left yields the last element of the left segment, while `First_on_right yields the first element of the right segment. It returns None if the segment is empty.
binary_search_segmented does not check that segment_of segments t as in the diagram, and behavior is unspecified if segment_of doesn't segment t. Behavior is also unspecified if segment_of mutates t.
val of_key_set : ('key, 'cmp) Base.Set.t -> f:('key -> 'data) -> ('key, 'data, 'cmp) tConvert a set to a map. Runs in O(length t) time plus a call to f for each key to compute the associated data.
val key_set : ('key, _, 'cmp) t -> ('key, 'cmp) Base.Set.tConverts a map to a set of its keys. Runs in O(length t) time.
val quickcheck_generator : ('k, 'cmp) comparator -> 'k Quickcheck.Generator.t -> 'v Quickcheck.Generator.t -> ('k, 'v, 'cmp) t Quickcheck.Generator.tval quickcheck_observer : 'k Quickcheck.Observer.t -> 'v Quickcheck.Observer.t -> ('k, 'v, 'cmp) t Quickcheck.Observer.tval quickcheck_shrinker : 'k Quickcheck.Shrinker.t -> 'v Quickcheck.Shrinker.t -> ('k, 'v, 'cmp) t Quickcheck.Shrinker.tThis shrinker and the other shrinkers for maps and trees produce a shrunk value by dropping a key-value pair, shrinking a key or shrinking a value. A shrunk key will override an existing key's value.
Which Map module should you use?
Interface design details
module Using_comparator : sig ... endmodule type For_deriving = Map_intf.For_derivinginclude For_deriving with type ('a, 'b, 'c) t := ('a, 'b, 'c) t
module type Sexp_of_m = sig ... endmodule type M_of_sexp = sig ... endmodule type Compare_m = sig ... endmodule type Equal_m = sig ... endmodule type Hash_fold_m = Base.Hasher.Sval sexp_of_m__t : (module Sexp_of_m with type t = 'k) -> ('v -> Base.Sexp.t) -> ('a, 'b, 'c) t -> Base.Sexp.tval m__t_of_sexp : (module M_of_sexp with type comparator_witness = 'cmp and type t = 'k) -> (Base.Sexp.t -> 'v) -> Base.Sexp.t -> ('a, 'b, 'c) tval compare_m__t : (module Compare_m) -> ('v -> 'v -> int) -> ('a, 'b, 'c) t -> ('a, 'b, 'c) t -> intval hash_fold_m__t : (module Hash_fold_m with type t = 'k) -> (Base.Hash.state -> 'v -> Base.Hash.state) -> Base.Hash.state -> ('a, 'b, 'c) t -> Base.Hash.statemodule type Key_plain = Map_intf.Key_plainmodule type Key = Map_intf.Keymodule type Key_binable = Map_intf.Key_binablemodule type S_plain = Map_intf.S_plainmodule type S = Map_intf.Smodule type S_binable = Map_intf.S_binablemodule Make_plain_using_comparator : functor (Key : sig ... end) -> S_plain with type Key.t = Key.t with type Key.comparator_witness = Key.comparator_witnessmodule Make_using_comparator : functor (Key : sig ... end) -> S with type Key.t = Key.t with type Key.comparator_witness = Key.comparator_witnessmodule Make_binable : functor (Key : Key_binable) -> S_binable with type Key.t = Key.tmodule Make_binable_using_comparator : functor (Key : sig ... end) -> S_binable with type Key.t = Key.t with type Key.comparator_witness = Key.comparator_witnessmodule Key_bin_io = Map_intf.Key_bin_ioThe following *bin* functions support bin-io on base-style maps, e.g.:
val bin_shape_m__t : ('a, 'c) Key_bin_io.t -> Bin_prot.Shape.t -> Bin_prot.Shape.tval bin_size_m__t : ('a, 'c) Key_bin_io.t -> 'b Bin_prot.Size.sizer -> ('a, 'b, 'c) t Bin_prot.Size.sizerval bin_write_m__t : ('a, 'c) Key_bin_io.t -> 'b Bin_prot.Write.writer -> ('a, 'b, 'c) t Bin_prot.Write.writerval bin_read_m__t : ('a, 'c) Key_bin_io.t -> 'b Bin_prot.Read.reader -> ('a, 'b, 'c) t Bin_prot.Read.readerval __bin_read_m__t__ : ('a, 'c) Key_bin_io.t -> 'b Bin_prot.Read.reader -> (Base.Int.t -> ('a, 'b, 'c) t) Bin_prot.Read.readermodule Stable : sig ... endThe following functors may be used to define stable modules