Imperative set-like data structure.
There are a few differences from simple sets:
It is an error to modify a bag (add, remove, remove_one, ...) during iteration
(fold, iter, ...).
module Elt : sig ... endinclude sig ... endval t_of_sexp : (Base.Sexp.t ‑> 'a) ‑> Base.Sexp.t ‑> 'a tval sexp_of_t : ('a ‑> Base.Sexp.t) ‑> 'a t ‑> Base.Sexp.tMuch of a bag's interface comes from the generic Base.Container module.
include Container.S1 with type a t := a tval mem : 'a t ‑> 'a ‑> equal:('a ‑> 'a ‑> bool) ‑> boolChecks whether the provided element is there, using equal.
val length : 'a t ‑> intval is_empty : 'a t ‑> boolval iter : 'a t ‑> f:('a ‑> unit) ‑> unitval fold : 'a t ‑> init:'accum ‑> f:('accum ‑> 'a ‑> 'accum) ‑> 'accumfold t ~init ~f returns f (... f (f (f init e1) e2) e3 ...) en, where e1..en
are the elements of t
val fold_result : 'a t ‑> init:'accum ‑> f:('accum ‑> 'a ‑> ('accum, 'e) Base.Result.t) ‑> ('accum, 'e) Base.Result.tfold_result t ~init ~f is a short-circuiting version of fold that runs in the
Result monad. If f returns an Error _, that value is returned without any
additional invocations of f.
val fold_until : 'a t ‑> init:'accum ‑> f:('accum ‑> 'a ‑> ('accum, 'final) Base__.Container_intf.Continue_or_stop.t) ‑> finish:('accum ‑> 'final) ‑> 'finalfold_until t ~init ~f ~finish is a short-circuiting version of fold. If f
returns Stop _ the computation ceases and results in that value. If f returns
Continue _, the fold will proceed. If f never returns Stop _, the final result
is computed by finish.
val exists : 'a t ‑> f:('a ‑> bool) ‑> boolReturns true if and only if there exists an element for which the provided
function evaluates to true. This is a short-circuiting operation.
val for_all : 'a t ‑> f:('a ‑> bool) ‑> boolReturns true if and only if the provided function evaluates to true for all
elements. This is a short-circuiting operation.
val count : 'a t ‑> f:('a ‑> bool) ‑> intReturns the number of elements for which the provided function evaluates to true.
val sum : (module Base.Commutative_group.S with type t = 'sum) ‑> 'a t ‑> f:('a ‑> 'sum) ‑> 'sumReturns the sum of f i for all i in the container.
val find : 'a t ‑> f:('a ‑> bool) ‑> 'a optionReturns as an option the first element for which f evaluates to true.
val find_map : 'a t ‑> f:('a ‑> 'b option) ‑> 'b optionReturns the first evaluation of f that returns Some, and returns None if there
is no such element.
val to_list : 'a t ‑> 'a listval to_array : 'a t ‑> 'a arrayval min_elt : 'a t ‑> compare:('a ‑> 'a ‑> int) ‑> 'a optionReturns a minimum (resp maximum) element from the collection using the provided
compare function, or None if the collection is empty. In case of a tie, the first
element encountered while traversing the collection is returned. The implementation
uses fold so it has the same complexity as fold.
val max_elt : 'a t ‑> compare:('a ‑> 'a ‑> int) ‑> 'a optioninclude Core_kernel__.Import.Invariant.S1 with type a t := a tval invariant : 'a Base__.Invariant_intf.inv ‑> 'a t Base__.Invariant_intf.invadd t v adds v to the bag t, returning an element that can
later be removed from the bag. add runs in constant time.
val mem_elt : 'a t ‑> 'a Elt.t ‑> Core_kernel__.Import.boolmem_elt t elt returns whether or not elt is in t. It is like mem (included
from Container), but it takes an 'a Elt.t instead of an 'a and runs in constant
time instead of linear time.
val remove : 'a t ‑> 'a Elt.t ‑> Core_kernel__.Import.unitremove t elt removes elt from the bag t, raising an exception if elt
is not in the bag. remove runs in constant time.
val remove_one : 'a t ‑> 'a Core_kernel__.Import.optionremove_one t removes some element from the bag, and returns its value.
remove_one runs in constant time.
val clear : 'a t ‑> Core_kernel__.Import.unitclear t removes all elements from the bag. clear runs in constant time.
val filter_inplace : 'a t ‑> f:('a ‑> Core_kernel__.Import.bool) ‑> Core_kernel__.Import.unitfilter_inplace t ~f removes all the elements from t that don't satisfy f.
val iter_elt : 'a t ‑> f:('a Elt.t ‑> Core_kernel__.Import.unit) ‑> Core_kernel__.Import.unitval find_elt : 'a t ‑> f:('a ‑> Core_kernel__.Import.bool) ‑> 'a Elt.t Core_kernel__.Import.optionfind_elt t ~f returns the first element in the bag satisfying f, returning None
if none is found.
val until_empty : 'a t ‑> ('a ‑> Core_kernel__.Import.unit) ‑> Core_kernel__.Import.unituntil_empty t f repeatedly removes values v from t, running f v on each one,
until t is empty. Running f may add elements to t if it wants.
val transfer : src:'a t ‑> dst:'a t ‑> Core_kernel__.Import.unittransfer ~src ~dst moves all of the elements from src to dst in constant
time.
val of_list : 'a Core_kernel__.Import.list ‑> 'a tval elts : 'a t ‑> 'a Elt.t Core_kernel__.Import.listval unchecked_iter : 'a t ‑> f:('a ‑> Core_kernel__.Import.unit) ‑> Core_kernel__.Import.unitunchecked_iter t ~f behaves like iter t ~f except that f is allowed to modify
t. Elements added by f may or may not be visited; elements removed by f that
have not been visited will not be visited. It is an (undetected) error to delete the
current element.