TrieSourceThe type of a trie. Keychains have type 'chain. The data associated with each keychain has type 'data. The description of the keychain implementation is 'desc; see Keychainable.t for details.
We derive only sexp_of for this type. For stable and round-trippable serializations, see Trie_stable.
val sexp_of_t :
('chain -> Sexplib0.Sexp.t) ->
('data -> Sexplib0.Sexp.t) ->
('desc -> Sexplib0.Sexp.t) ->
('chain, 'data, 'desc) t ->
Sexplib0.Sexp.tUnlike Base.Map, we avoid polymorphic variants for add* functions.
Constructors via comparator.
val of_alist :
('chain, 'desc) Keychainable.t ->
('chain * 'data) Base.list ->
(('chain, 'data, 'desc) t, 'chain) Or_duplicate.tval of_alist_or_error :
('chain, 'desc) Keychainable.t ->
('chain * 'data) Base.list ->
('chain, 'data, 'desc) t Base.Or_error.tval of_alist_exn :
('chain, 'desc) Keychainable.t ->
('chain * 'data) Base.list ->
('chain, 'data, 'desc) tval of_alist_multi :
('chain, 'desc) Keychainable.t ->
('chain * 'data) Base.list ->
('chain, 'data Base.list, 'desc) tval of_sequence :
('chain, 'desc) Keychainable.t ->
('chain * 'data) Base.Sequence.t ->
(('chain, 'data, 'desc) t, 'chain) Or_duplicate.tval of_sequence_or_error :
('chain, 'desc) Keychainable.t ->
('chain * 'data) Base.Sequence.t ->
('chain, 'data, 'desc) t Base.Or_error.tval of_sequence_exn :
('chain, 'desc) Keychainable.t ->
('chain * 'data) Base.Sequence.t ->
('chain, 'data, 'desc) tval of_sequence_multi :
('chain, 'desc) Keychainable.t ->
('chain * 'data) Base.Sequence.t ->
('chain, 'data Base.list, 'desc) tAccessors at top layer of trie
val create :
('chain, (_ * 'key * 'cmp * _ * _) as 'desc) Keychainable.t ->
datum:'data Base.option ->
tries:('key, ('chain, 'data, 'desc) t, 'cmp) Base.Map.t ->
('chain, 'data, 'desc) tval tries :
('chain, 'data, (_ * 'key * 'cmp * _ * _) as 'desc) t ->
('key, ('chain, 'data, 'desc) t, 'cmp) Base.Map.tval find_child :
('chain, 'data, (_ * 'key * _ * _ * _) as 'desc) t ->
'key ->
('chain, 'data, 'desc) t Base.optionLength accessors
Key metadata accessors
Comparisons
Serialization
Accessors for individual elements.
val add :
('chain, 'data, 'desc) t ->
keychain:'chain ->
data:'data ->
(('chain, 'data, 'desc) t, 'chain) Or_duplicate.tval add_or_error :
('chain, 'data, 'desc) t ->
keychain:'chain ->
data:'data ->
('chain, 'data, 'desc) t Base.Or_error.tval change :
('chain, 'data, 'desc) t ->
'chain ->
f:('data Base.option -> 'data Base.option) ->
('chain, 'data, 'desc) tval update :
('chain, 'data, 'desc) t ->
'chain ->
f:('data Base.option -> 'data) ->
('chain, 'data, 'desc) tAccessors for trie nodes
Reports whether there is a non-empty trie at the position of the given chain. Equivalently, reports whether the given key is a (non-strict) prefix of any element's key.
Produces the trie at the given position. If [not (mem_trie t keychain)]], returns an
empty trie.val set_trie :
('chain, 'data, 'desc) t ->
keychain:'chain ->
trie:('chain, 'data, 'desc) t ->
('chain, 'data, 'desc) tReplaces the trie node at the given position, if any, with the given trie.
val add_trie :
('chain, 'data, 'desc) t ->
keychain:'chain ->
trie:('chain, 'data, 'desc) t ->
(('chain, 'data, 'desc) t, 'chain) Or_duplicate.tAdds the given trie node at the given position, or reports a duplicate if there is already a non-empty trie there.
val add_trie_or_error :
('chain, 'data, 'desc) t ->
keychain:'chain ->
trie:('chain, 'data, 'desc) t ->
('chain, 'data, 'desc) t Base.Or_error.tLike add_trie; returns an Or_error.t.
val add_trie_exn :
('chain, 'data, 'desc) t ->
keychain:'chain ->
trie:('chain, 'data, 'desc) t ->
('chain, 'data, 'desc) tLike add_trie; raises on failure.
val update_trie :
('chain, 'data, 'desc) t ->
'chain ->
f:(('chain, 'data, 'desc) t -> ('chain, 'data, 'desc) t) ->
('chain, 'data, 'desc) tModifies the trie node at the position of the given chain.
Traversals
val invariant :
'chain Base.Invariant.t ->
'data Base.Invariant.t ->
('chain, 'data, _) t Base.Invariant.tUnlike Base.Map, we distinguish fold from foldi. For consistency with Container.fold, we take the accumulator argument first in both cases.
val foldi_tries :
('chain, 'data, 'desc) t ->
init:'acc ->
f:('acc -> keychain:'chain -> trie:('chain, 'data, 'desc) t -> 'acc) ->
'accCalls f with t, plus recursively on descendent tries of t where not (is_empty trie). Passes keychain where find_trie t keychain = trie.
val filter_mapi :
('chain, 'a, 'desc) t ->
f:(keychain:'chain -> data:'a -> 'b Base.option) ->
('chain, 'b, 'desc) tval partition_map :
('chain, 'a, 'desc) t ->
f:('a -> ('b, 'c) Base.Either.t) ->
('chain, 'b, 'desc) t * ('chain, 'c, 'desc) tval partition_mapi :
('chain, 'a, 'desc) t ->
f:(keychain:'chain -> data:'a -> ('b, 'c) Base.Either.t) ->
('chain, 'b, 'desc) t * ('chain, 'c, 'desc) tval merge :
('chain, 'a, 'desc) t ->
('chain, 'b, 'desc) t ->
f:
(keychain:'chain ->
[ `Left of 'a | `Right of 'b | `Both of 'a * 'b ] ->
'c Base.option) ->
('chain, 'c, 'desc) tModules and functors specializing tries to a keychain implementation.
module Of_listable
(Key : Base.Comparator.S)
(Keychain : Keychainable.Listable with type elt = Key.t) :
S with module Keychain = Keychainable.Of_listable(Key)(Keychain)