package core_kernel

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Imperative set-like data structure.

There are a few differences from simple sets:

  • Duplicates are allowed.
  • It doesn't require anything (hashable, comparable) of elements in the bag.
  • Addition and removal are constant time operations.

It is an error to modify a bag (add, remove, remove_one, ...) during iteration (fold, iter, ...).

module Elt : sig ... end
type 'a t
include Ppx_sexp_conv_lib.Sexpable.S1 with type 'a t := 'a t
val t_of_sexp : (Sexplib0.Sexp.t -> 'a) -> Sexplib0.Sexp.t -> 'a t
val sexp_of_t : ('a -> Sexplib0.Sexp.t) -> 'a t -> Sexplib0.Sexp.t

Much of a bag's interface comes from the generic Base.Container module.

val mem : 'a t -> 'a -> equal:('a -> 'a -> bool) -> bool
val length : 'a t -> int
val is_empty : 'a t -> bool
val iter : 'a t -> f:('a -> unit) -> unit
val fold : 'a t -> init:'accum -> f:('accum -> 'a -> 'accum) -> 'accum
val fold_result : 'a t -> init:'accum -> f:('accum -> 'a -> ('accum, 'e) Base__.Result.t) -> ('accum, 'e) Base__.Result.t
val fold_until : 'a t -> init:'accum -> f:('accum -> 'a -> ('accum, 'final) Base__.Container_intf.Continue_or_stop.t) -> finish:('accum -> 'final) -> 'final
val exists : 'a t -> f:('a -> bool) -> bool
val for_all : 'a t -> f:('a -> bool) -> bool
val count : 'a t -> f:('a -> bool) -> int
val sum : (module Base__.Container_intf.Summable with type t = 'sum) -> 'a t -> f:('a -> 'sum) -> 'sum
val find : 'a t -> f:('a -> bool) -> 'a option
val find_map : 'a t -> f:('a -> 'b option) -> 'b option
val to_list : 'a t -> 'a list
val to_array : 'a t -> 'a array
val min_elt : 'a t -> compare:('a -> 'a -> int) -> 'a option
val max_elt : 'a t -> compare:('a -> 'a -> int) -> 'a option
val invariant : 'a Base__.Invariant_intf.inv -> 'a t Base__.Invariant_intf.inv
val create : Base.Unit.t -> 'a t

create () returns an empty bag.

val add : 'a t -> 'a -> 'a Elt.t

add 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 add_unit : 'a t -> 'a -> Base.Unit.t
val mem_elt : 'a t -> 'a Elt.t -> Base.Bool.t

mem_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 -> Base.Unit.t

remove t elt removes elt from the bag t, raising an exception if elt is not in the bag. remove runs in constant time.

val choose : 'a t -> 'a Elt.t Base.Option.t

choose t returns some element in the bag.

val remove_one : 'a t -> 'a Base.Option.t

remove_one t removes some element from the bag, and returns its value. remove_one runs in constant time.

val clear : 'a t -> Base.Unit.t

clear t removes all elements from the bag. clear runs in constant time.

val filter_inplace : 'a t -> f:('a -> Base.Bool.t) -> Base.Unit.t

filter_inplace t ~f removes all the elements from t that don't satisfy f.

val iter_elt : 'a t -> f:('a Elt.t -> Base.Unit.t) -> Base.Unit.t
val find_elt : 'a t -> f:('a -> Base.Bool.t) -> 'a Elt.t Base.Option.t

find_elt t ~f returns the first element in the bag satisfying f, returning None if none is found.

val until_empty : 'a t -> ('a -> Base.Unit.t) -> Base.Unit.t

until_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 -> Base.Unit.t

transfer ~src ~dst moves all of the elements from src to dst in constant time.

val of_list : 'a Base.List.t -> 'a t
val elts : 'a t -> 'a Elt.t Base.List.t
val unchecked_iter : 'a t -> f:('a -> Base.Unit.t) -> Base.Unit.t

unchecked_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.

OCaml

Innovation. Community. Security.