<html><head> <link rel="stylesheet" href="style.css" type="text/css"> <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"> <link rel="Start" href="index.html"> <link title="Index of types" rel=Appendix href="index_types.html"> <link title="Index of exceptions" rel=Appendix href="index_exceptions.html"> <link title="Index of values" rel=Appendix href="index_values.html"> <link title="Index of modules" rel=Appendix href="index_modules.html"> <link title="Index of module types" rel=Appendix href="index_module_types.html"> <link title="Command" rel="Chapter" href="Command.html"> <link title="File_tail" rel="Chapter" href="File_tail.html"> <link title="File_writer" rel="Chapter" href="File_writer.html"> <link title="Import" rel="Chapter" href="Import.html"> <link title="Lock_file" rel="Chapter" href="Lock_file.html"> <link title="Log" rel="Chapter" href="Log.html"> <link title="Persistent_singleton" rel="Chapter" href="Persistent_singleton.html"> <link title="Rpc" rel="Chapter" href="Rpc.html"> <link title="Rpc_intf" rel="Chapter" href="Rpc_intf.html"> <link title="Std" rel="Chapter" href="Std.html"> <link title="Tcp" rel="Chapter" href="Tcp.html"> <link title="Tcp_file" rel="Chapter" href="Tcp_file.html"> <link title="Typed_tcp" rel="Chapter" href="Typed_tcp.html"> <link title="Typed_tcp_intf" rel="Chapter" href="Typed_tcp_intf.html"> <link title="Unpack_sequence" rel="Chapter" href="Unpack_sequence.html"> <link title="User_and_group" rel="Chapter" href="User_and_group.html"> <link title="Versioned_rpc" rel="Chapter" href="Versioned_rpc.html"> <link title="Versioned_typed_tcp" rel="Chapter" href="Versioned_typed_tcp.html"> <link title="Weak_hashtbl" rel="Chapter" href="Weak_hashtbl.html"><title>Std.Typed_tcp</title> </head> <body> <code class="code"><span class="keyword">sig</span><br> <span class="keyword">module</span> <span class="keyword">type</span> <span class="constructor">Arg</span> = <span class="constructor">Typed_tcp_intf</span>.<span class="constructor">Arg</span><br> <span class="keyword">module</span> <span class="keyword">type</span> <span class="constructor">Binable_t</span> = <span class="constructor">Typed_tcp_intf</span>.<span class="constructor">Binable_t</span><br> <span class="keyword">module</span> <span class="keyword">type</span> <span class="constructor">S</span> = <span class="constructor">Typed_tcp_intf</span>.<span class="constructor">S</span><br> <span class="keyword">module</span> <span class="constructor">Make</span> :<br> <span class="keyword">functor</span> (<span class="constructor">Arg</span> : <span class="constructor">Arg</span>) <span class="keywordsign">-></span><br> <span class="keyword">sig</span><br> <span class="keyword">module</span> <span class="constructor">Client_message</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = <span class="constructor">Arg</span>.<span class="constructor">Client_message</span>.t<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Server_message</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = <span class="constructor">Arg</span>.<span class="constructor">Server_message</span>.t<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Client_id</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = <span class="constructor">Typed_tcp</span>.<span class="constructor">Make</span>(<span class="constructor">Arg</span>).<span class="constructor">Client_id</span>.t<br> <span class="keyword">val</span> ( >= ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( <= ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( = ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( > ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( < ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( <> ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> equal : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> min : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> max : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> ascending : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> descending : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> between : t <span class="keywordsign">-></span> low:t <span class="keywordsign">-></span> high:t <span class="keywordsign">-></span> bool<br> <span class="keyword">module</span> <span class="constructor">Replace_polymorphic_compare</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">val</span> ( >= ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( <= ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( = ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( > ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( < ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( <> ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> equal : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> min : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> max : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> _squelch_unused_module_warning_ : unit<br> <span class="keyword">end</span><br> <span class="keyword">type</span> comparator = <span class="constructor">Typed_tcp</span>.<span class="constructor">Make</span>(<span class="constructor">Arg</span>).<span class="constructor">Client_id</span>.comparator<br> <span class="keyword">val</span> validate_lbound :<br> min:t <span class="constructor">Core</span>.<span class="constructor">Comparable_intf</span>.bound <span class="keywordsign">-></span> t <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check<br> <span class="keyword">val</span> validate_ubound :<br> max:t <span class="constructor">Core</span>.<span class="constructor">Comparable_intf</span>.bound <span class="keywordsign">-></span> t <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check<br> <span class="keyword">val</span> validate_bound :<br> min:t <span class="constructor">Core</span>.<span class="constructor">Comparable_intf</span>.bound <span class="keywordsign">-></span><br> max:t <span class="constructor">Core</span>.<span class="constructor">Comparable_intf</span>.bound <span class="keywordsign">-></span> t <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check<br> <span class="keyword">val</span> comparator : (t, comparator) <span class="constructor">Core</span>.<span class="constructor">Comparator</span>.t_<br> <span class="keyword">module</span> <span class="constructor">Map</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">module</span> <span class="constructor">Key</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = t<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">type</span> comparator = comparator<br> <span class="keyword">val</span> comparator : (t, comparator) <span class="constructor">Core</span>.<span class="constructor">Comparator</span>.t_<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Tree</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> <span class="keywordsign">'</span>a t =<br> (<span class="constructor">Key</span>.t, <span class="keywordsign">'</span>a, <span class="constructor">Key</span>.comparator) <span class="constructor">Core</span>.<span class="constructor">Core_map</span>.<span class="constructor">Tree</span>.t<br> <span class="keyword">val</span> empty : <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> singleton : <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> of_alist :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Duplicate_key</span> <span class="keyword">of</span> <span class="constructor">Key</span>.t <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a t ]<br> <span class="keyword">val</span> of_alist_exn : (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> of_alist_multi : (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list t<br> <span class="keyword">val</span> of_alist_fold :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> of_sorted_array :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) array <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="constructor">Core</span>.<span class="constructor">Or_error</span>.t<br> <span class="keyword">val</span> of_sorted_array_unchecked :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) array <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> of_tree : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> invariants : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> is_empty : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> length : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> add : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> add_multi :<br> <span class="keywordsign">'</span>a list t <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list t<br> <span class="keyword">val</span> change :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a option <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> find : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> find_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> remove : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> mem : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> iter :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> iter2 :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b t <span class="keywordsign">-></span><br> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> data:[ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ] <span class="keywordsign">-></span><br> unit) <span class="keywordsign">-></span><br> unit<br> <span class="keyword">val</span> map : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> mapi : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> fold :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> fold_right :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> filter :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> filter_map : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> filter_mapi :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> compare_direct :<br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> int) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> equal : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> keys : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t list<br> <span class="keyword">val</span> data : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list<br> <span class="keyword">val</span> to_alist : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list<br> <span class="keyword">val</span> validate :<br> name:(<span class="constructor">Key</span>.t <span class="keywordsign">-></span> string) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check<br> <span class="keyword">val</span> merge :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b t <span class="keywordsign">-></span><br> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ] <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c option) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c t<br> <span class="keyword">val</span> symmetric_diff :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> data_equal:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> (<span class="constructor">Key</span>.t *<br> [ <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Unequal</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>a ])<br> list<br> <span class="keyword">val</span> min_elt : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> min_elt_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> max_elt : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> max_elt_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> for_all : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> exists : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> fold_range_inclusive :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> min:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> max:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> range_to_alist :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> min:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> max:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list<br> <span class="keyword">val</span> prev_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> next_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> rank : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> int option<br> <span class="keyword">val</span> to_tree : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> t_of_sexp :<br> (<span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> sexp_of_t :<br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">type</span> <span class="keywordsign">'</span>a t = (<span class="constructor">Key</span>.t, <span class="keywordsign">'</span>a, <span class="constructor">Key</span>.comparator) <span class="constructor">Core</span>.<span class="constructor">Core_map</span>.t<br> <span class="keyword">val</span> empty : <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> singleton : <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> of_alist :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Duplicate_key</span> <span class="keyword">of</span> <span class="constructor">Key</span>.t <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a t ]<br> <span class="keyword">val</span> of_alist_exn : (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> of_alist_multi : (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list t<br> <span class="keyword">val</span> of_alist_fold :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> of_sorted_array :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) array <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="constructor">Core</span>.<span class="constructor">Or_error</span>.t<br> <span class="keyword">val</span> of_sorted_array_unchecked : (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) array <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> of_tree : <span class="keywordsign">'</span>a <span class="constructor">Tree</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> invariants : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> is_empty : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> length : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> add : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> add_multi :<br> <span class="keywordsign">'</span>a list t <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list t<br> <span class="keyword">val</span> change :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a option <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> find : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> find_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> remove : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> mem : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> iter : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> iter2 :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b t <span class="keywordsign">-></span><br> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> data:[ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ] <span class="keywordsign">-></span><br> unit) <span class="keywordsign">-></span><br> unit<br> <span class="keyword">val</span> map : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> mapi : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> fold :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> fold_right :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> filter : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> filter_map : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> filter_mapi :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> compare_direct : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> int) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> equal : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> keys : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t list<br> <span class="keyword">val</span> data : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list<br> <span class="keyword">val</span> to_alist : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list<br> <span class="keyword">val</span> validate :<br> name:(<span class="constructor">Key</span>.t <span class="keywordsign">-></span> string) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check<br> <span class="keyword">val</span> merge :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b t <span class="keywordsign">-></span><br> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ] <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c option) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c t<br> <span class="keyword">val</span> symmetric_diff :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> data_equal:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> (<span class="constructor">Key</span>.t *<br> [ <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Unequal</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>a ])<br> list<br> <span class="keyword">val</span> min_elt : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> min_elt_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> max_elt : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> max_elt_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> for_all : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> exists : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> fold_range_inclusive :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> min:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> max:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> range_to_alist :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> min:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> max:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list<br> <span class="keyword">val</span> prev_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> next_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> rank : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> int option<br> <span class="keyword">val</span> to_tree : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">Tree</span>.t<br> <span class="keyword">val</span> t_of_sexp :<br> (<span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> sexp_of_t :<br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">val</span> compare : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> int) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> bin_size_t : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Size</span>.sizer1<br> <span class="keyword">val</span> bin_write_t : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Map_to_safe</span>.writer1<br> <span class="keyword">val</span> bin_write_t_ : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_write_c</span>.writer1<br> <span class="keyword">val</span> bin_read_t : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Map_to_safe</span>.reader1<br> <span class="keyword">val</span> bin_read_t_ : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_read_c</span>.reader1<br> <span class="keyword">val</span> bin_read_t__ :<br> (<span class="keywordsign">'</span>a, int <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_read_c</span>.reader1<br> <span class="keyword">val</span> bin_writer_t : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.<span class="constructor">S1</span>.writer<br> <span class="keyword">val</span> bin_reader_t : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.<span class="constructor">S1</span>.reader<br> <span class="keyword">val</span> bin_t : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.<span class="constructor">S1</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Set</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">module</span> <span class="constructor">Elt</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = t<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">type</span> comparator = comparator<br> <span class="keyword">val</span> comparator : (t, comparator) <span class="constructor">Core</span>.<span class="constructor">Comparator</span>.t_<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Tree</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = (<span class="constructor">Elt</span>.t, <span class="constructor">Elt</span>.comparator) <span class="constructor">Core</span>.<span class="constructor">Core_set</span>.<span class="constructor">Tree</span>.t<br> <span class="keyword">val</span> length : t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> is_empty : t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> iter : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> fold :<br> t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>accum <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>accum <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>accum) <span class="keywordsign">-></span> <span class="keywordsign">'</span>accum<br> <span class="keyword">val</span> exists : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> for_all : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> count : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> find : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> find_map : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> to_list : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t list<br> <span class="keyword">val</span> to_array : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t array<br> <span class="keyword">val</span> invariants : t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> mem : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> add : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> remove : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> union : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> inter : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> diff : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> compare_direct : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> equal : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> subset : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> fold_until :<br> t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span><br> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Continue</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Stop</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ]) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> fold_right :<br> t <span class="keywordsign">-></span> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> iter2 :<br> t <span class="keywordsign">-></span><br> t <span class="keywordsign">-></span><br> f:([ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="constructor">Elt</span>.t * <span class="constructor">Elt</span>.t<br> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="constructor">Elt</span>.t<br> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="constructor">Elt</span>.t ] <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span><br> unit<br> <span class="keyword">val</span> filter : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> partition_tf : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> t * t<br> <span class="keyword">val</span> elements : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t list<br> <span class="keyword">val</span> min_elt : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> min_elt_exn : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> max_elt : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> max_elt_exn : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> choose : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> choose_exn : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> split : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t * bool * t<br> <span class="keyword">val</span> group_by :<br> t <span class="keywordsign">-></span> equiv:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> t list<br> <span class="keyword">val</span> find_exn : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> find_index : t <span class="keywordsign">-></span> int <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> remove_index : t <span class="keywordsign">-></span> int <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> to_tree : t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> empty : t<br> <span class="keyword">val</span> singleton : <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> union_list : t list <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_list : <span class="constructor">Elt</span>.t list <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_array : <span class="constructor">Elt</span>.t array <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_sorted_array : <span class="constructor">Elt</span>.t array <span class="keywordsign">-></span> t <span class="constructor">Core</span>.<span class="constructor">Or_error</span>.t<br> <span class="keyword">val</span> of_sorted_array_unchecked : <span class="constructor">Elt</span>.t array <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> stable_dedup_list : <span class="constructor">Elt</span>.t list <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t list<br> <span class="keyword">val</span> map :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) <span class="constructor">Core</span>.<span class="constructor">Core_set</span>.<span class="constructor">Tree</span>.t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t) <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> filter_map :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) <span class="constructor">Core</span>.<span class="constructor">Core_set</span>.<span class="constructor">Tree</span>.t <span class="keywordsign">-></span><br> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option) <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_tree : t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">end</span><br> <span class="keyword">type</span> t = (<span class="constructor">Elt</span>.t, <span class="constructor">Elt</span>.comparator) <span class="constructor">Core</span>.<span class="constructor">Core_set</span>.t<br> <span class="keyword">val</span> length : t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> is_empty : t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> iter : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> fold :<br> t <span class="keywordsign">-></span> init:<span class="keywordsign">'</span>accum <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>accum <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>accum) <span class="keywordsign">-></span> <span class="keywordsign">'</span>accum<br> <span class="keyword">val</span> exists : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> for_all : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> count : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> find : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> find_map : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> to_list : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t list<br> <span class="keyword">val</span> to_array : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t array<br> <span class="keyword">val</span> invariants : t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> mem : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> add : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> remove : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> union : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> inter : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> diff : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> compare_direct : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> equal : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> subset : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> fold_until :<br> t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span><br> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Continue</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Stop</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ]) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> fold_right : t <span class="keywordsign">-></span> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> iter2 :<br> t <span class="keywordsign">-></span><br> t <span class="keywordsign">-></span><br> f:([ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="constructor">Elt</span>.t * <span class="constructor">Elt</span>.t<br> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="constructor">Elt</span>.t<br> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="constructor">Elt</span>.t ] <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span><br> unit<br> <span class="keyword">val</span> filter : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> partition_tf : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> t * t<br> <span class="keyword">val</span> elements : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t list<br> <span class="keyword">val</span> min_elt : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> min_elt_exn : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> max_elt : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> max_elt_exn : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> choose : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> choose_exn : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> split : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t * bool * t<br> <span class="keyword">val</span> group_by : t <span class="keywordsign">-></span> equiv:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> t list<br> <span class="keyword">val</span> find_exn : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> find_index : t <span class="keywordsign">-></span> int <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> remove_index : t <span class="keywordsign">-></span> int <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> to_tree : t <span class="keywordsign">-></span> <span class="constructor">Tree</span>.t<br> <span class="keyword">val</span> empty : t<br> <span class="keyword">val</span> singleton : <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> union_list : t list <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_list : <span class="constructor">Elt</span>.t list <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_array : <span class="constructor">Elt</span>.t array <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_sorted_array : <span class="constructor">Elt</span>.t array <span class="keywordsign">-></span> t <span class="constructor">Core</span>.<span class="constructor">Or_error</span>.t<br> <span class="keyword">val</span> of_sorted_array_unchecked : <span class="constructor">Elt</span>.t array <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> stable_dedup_list : <span class="constructor">Elt</span>.t list <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t list<br> <span class="keyword">val</span> map : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) <span class="constructor">Core</span>.<span class="constructor">Core_set</span>.t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t) <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> filter_map :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) <span class="constructor">Core</span>.<span class="constructor">Core_set</span>.t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option) <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_tree : <span class="constructor">Tree</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> bin_size_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Size</span>.sizer<br> <span class="keyword">val</span> bin_write_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Map_to_safe</span>.writer<br> <span class="keyword">val</span> bin_write_t_ : t <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_write_c</span>.writer<br> <span class="keyword">val</span> bin_read_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Read_ml</span>.reader<br> <span class="keyword">val</span> bin_read_t_ : t <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_read_c</span>.reader<br> <span class="keyword">val</span> bin_read_t__ : (int <span class="keywordsign">-></span> t) <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_read_c</span>.reader<br> <span class="keyword">val</span> bin_writer_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.writer<br> <span class="keyword">val</span> bin_reader_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.reader<br> <span class="keyword">val</span> bin_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Hashable</span> : <span class="keyword">sig</span> <span class="keyword">type</span> t = t <span class="keyword">end</span><br> <span class="keyword">val</span> hash : t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> hashable : t <span class="constructor">Core</span>.<span class="constructor">Hashable</span>.<span class="constructor">Hashtbl</span>.<span class="constructor">Hashable</span>.t<br> <span class="keyword">module</span> <span class="constructor">Table</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> key = t<br> <span class="keyword">type</span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) hashtbl = (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) <span class="constructor">Core</span>.<span class="constructor">Hashable</span>.<span class="constructor">Hashtbl</span>.t<br> <span class="keyword">type</span> <span class="keywordsign">'</span>b t = (key, <span class="keywordsign">'</span>b) hashtbl<br> <span class="keyword">type</span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ = <span class="keywordsign">'</span>b t<br> <span class="keyword">type</span> <span class="keywordsign">'</span>a key_ = key<br> <span class="keyword">val</span> hashable : key <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.<span class="constructor">Hashable</span>.t<br> <span class="keyword">val</span> create :<br> (<span class="keywordsign">'</span>a key_, unit <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_)<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> of_alist :<br> (<span class="keywordsign">'</span>a key_,<br> (<span class="keywordsign">'</span>a key_ * <span class="keywordsign">'</span>b) list <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Duplicate_key</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> <span class="keyword">of</span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ ])<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> of_alist_report_all_dups :<br> (<span class="keywordsign">'</span>a key_,<br> (<span class="keywordsign">'</span>a key_ * <span class="keywordsign">'</span>b) list <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Duplicate_keys</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a key_ list <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> <span class="keyword">of</span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ ])<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> of_alist_exn :<br> (<span class="keywordsign">'</span>a key_, (<span class="keywordsign">'</span>a key_ * <span class="keywordsign">'</span>b) list <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_)<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> of_alist_multi :<br> (<span class="keywordsign">'</span>a key_, (<span class="keywordsign">'</span>a key_ * <span class="keywordsign">'</span>b) list <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b list) t_)<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> create_mapped :<br> (<span class="keywordsign">'</span>a key_,<br> get_key:(<span class="keywordsign">'</span>r <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_) <span class="keywordsign">-></span><br> get_data:(<span class="keywordsign">'</span>r <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>r list <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Duplicate_keys</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a key_ list <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> <span class="keyword">of</span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ ])<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> create_with_key :<br> (<span class="keywordsign">'</span>a key_,<br> get_key:(<span class="keywordsign">'</span>r <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>r list <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Duplicate_keys</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a key_ list <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> <span class="keyword">of</span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>r) t_ ])<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> create_with_key_exn :<br> (<span class="keywordsign">'</span>a key_,<br> get_key:(<span class="keywordsign">'</span>r <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_) <span class="keywordsign">-></span> <span class="keywordsign">'</span>r list <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>r) t_)<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> group :<br> (<span class="keywordsign">'</span>a key_,<br> get_key:(<span class="keywordsign">'</span>r <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_) <span class="keywordsign">-></span><br> get_data:(<span class="keywordsign">'</span>r <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span><br> combine:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>r list <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_)<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> sexp_of_key : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">val</span> clear : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> copy : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_<br> <span class="keyword">val</span> invariant : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> fold :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>c <span class="keywordsign">-></span> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>c) <span class="keywordsign">-></span> <span class="keywordsign">'</span>c<br> <span class="keyword">val</span> iter :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> existsi :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> exists : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> length : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> is_empty : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> mem : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> remove : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> remove_one : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b list) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> replace : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> set : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> add :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Duplicate</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> ]<br> <span class="keyword">val</span> add_exn : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> change :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> (<span class="keywordsign">'</span>b option <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> add_multi :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b list) t_ <span class="keywordsign">-></span> key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> remove_multi : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b list) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> map : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>c) t_<br> <span class="keyword">val</span> mapi :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>c) t_<br> <span class="keyword">val</span> filter_map :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c option) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>c) t_<br> <span class="keyword">val</span> filter_mapi :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c option) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>c) t_<br> <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_<br> <span class="keyword">val</span> filteri :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_<br> <span class="keyword">val</span> partition_map :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Fst</span> <span class="keyword">of</span> <span class="keywordsign">'</span>c <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Snd</span> <span class="keyword">of</span> <span class="keywordsign">'</span>d ]) <span class="keywordsign">-></span><br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>c) t_ * (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>d) t_<br> <span class="keyword">val</span> partition_mapi :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Fst</span> <span class="keyword">of</span> <span class="keywordsign">'</span>c <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Snd</span> <span class="keyword">of</span> <span class="keywordsign">'</span>d ]) <span class="keywordsign">-></span><br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>c) t_ * (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>d) t_<br> <span class="keyword">val</span> partition_tf :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ * (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_<br> <span class="keyword">val</span> partitioni_tf :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ * (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_<br> <span class="keyword">val</span> find_or_add :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> default:(unit <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> find : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option<br> <span class="keyword">val</span> find_exn : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> find_and_remove : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option<br> <span class="keyword">val</span> iter_vals : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> merge :<br> (<span class="keywordsign">'</span>k, <span class="keywordsign">'</span>a) t_ <span class="keywordsign">-></span><br> (<span class="keywordsign">'</span>k, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(key:<span class="keywordsign">'</span>k key_ <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ] <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c option) <span class="keywordsign">-></span><br> (<span class="keywordsign">'</span>k, <span class="keywordsign">'</span>c) t_<br> <span class="keyword">val</span> merge_into :<br> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span><br> src:(<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> dst:(<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> keys : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ list<br> <span class="keyword">val</span> data : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>b list<br> <span class="keyword">val</span> filter_inplace : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> filteri_inplace :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> equal :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> to_alist : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a key_ * <span class="keywordsign">'</span>b) list<br> <span class="keyword">val</span> validate :<br> name:(<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> string) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check<br> <span class="keyword">val</span> incr : ?by:int <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, int) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> t_of_sexp :<br> (<span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> sexp_of_t :<br> (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Hash_set</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> elt = t<br> <span class="keyword">type</span> <span class="keywordsign">'</span>a hash_set = <span class="keywordsign">'</span>a <span class="constructor">Core</span>.<span class="constructor">Hash_set</span>.t<br> <span class="keyword">type</span> t = elt hash_set<br> <span class="keyword">type</span> <span class="keywordsign">'</span>a t_ = t<br> <span class="keyword">type</span> <span class="keywordsign">'</span>a elt_ = elt<br> <span class="keyword">val</span> create :<br> (<span class="keywordsign">'</span>a, unit <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t_)<br> <span class="constructor">Core</span>.<span class="constructor">Hash_set_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> of_list :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a elt_ list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t_)<br> <span class="constructor">Core</span>.<span class="constructor">Hash_set_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Hash_queue</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">module</span> <span class="constructor">Key</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = t<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> hash : t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">type</span> <span class="keywordsign">'</span>a t = <span class="keywordsign">'</span>a <span class="constructor">Typed_tcp</span>.<span class="constructor">Make</span>(<span class="constructor">Arg</span>).<span class="constructor">Client_id</span>.<span class="constructor">Hash_queue</span>.t<br> <span class="keyword">val</span> length : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> is_empty : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> iter : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> fold :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> init:<span class="keywordsign">'</span>accum <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>accum <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>accum) <span class="keywordsign">-></span> <span class="keywordsign">'</span>accum<br> <span class="keyword">val</span> exists : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> for_all : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> count : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> find : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> find_map : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option<br> <span class="keyword">val</span> to_list : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list<br> <span class="keyword">val</span> to_array : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a array<br> <span class="keyword">val</span> invariant : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> create : unit <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> clear : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> mem : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> lookup : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> lookup_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> enqueue :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Key_already_present</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> ]<br> <span class="keyword">val</span> enqueue_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> first : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> keys : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t list<br> <span class="keyword">val</span> dequeue : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> dequeue_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> dequeue_with_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> dequeue_with_key_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> dequeue_all : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> remove : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">No_such_key</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> ]<br> <span class="keyword">val</span> remove_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> replace : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">No_such_key</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> ]<br> <span class="keyword">val</span> replace_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> iteri : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> foldi :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Hash_heap</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">module</span> <span class="constructor">Key</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = t<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> hash : t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">type</span> <span class="keywordsign">'</span>a t = <span class="keywordsign">'</span>a <span class="constructor">Typed_tcp</span>.<span class="constructor">Make</span>(<span class="constructor">Arg</span>).<span class="constructor">Client_id</span>.<span class="constructor">Hash_heap</span>.t<br> <span class="keyword">val</span> create : ?min_size:int <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> int) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> copy : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> push :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Key_already_present</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> ]<br> <span class="keyword">val</span> push_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> replace : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> remove : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> mem : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> top : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> top_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> top_with_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> top_with_key_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> pop_with_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> pop_with_key_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> pop : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> pop_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> cond_pop_with_key :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> (key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> cond_pop : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> find : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> find_pop : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> find_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> find_pop_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> iter : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> iter_vals : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> length : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">end</span><br> <span class="keyword">val</span> of_int_exn : int <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> to_int_exn : t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> of_string : string <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> to_string : t <span class="keywordsign">-></span> string<br> <span class="keyword">val</span> create : unit <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">val</span> bin_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.t<br> <span class="keyword">val</span> bin_read_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Read_ml</span>.reader<br> <span class="keyword">val</span> bin_read_t_ : t <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_read_c</span>.reader<br> <span class="keyword">val</span> bin_read_t__ : (int <span class="keywordsign">-></span> t) <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_read_c</span>.reader<br> <span class="keyword">val</span> bin_reader_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.reader<br> <span class="keyword">val</span> bin_size_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Size</span>.sizer<br> <span class="keyword">val</span> bin_write_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Write_ml</span>.writer<br> <span class="keyword">val</span> bin_write_t_ : t <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_write_c</span>.writer<br> <span class="keyword">val</span> bin_writer_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.writer<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Server_read_result</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t =<br> <span class="constructor">Typed_tcp</span>.<span class="constructor">Make</span>(<span class="constructor">Arg</span>).<span class="constructor">Server_read_result</span>.t =<br> <span class="constructor">Connect</span> <span class="keyword">of</span> <span class="constructor">Client_id</span>.t<br> <span class="keywordsign">|</span> <span class="constructor">Disconnect</span> <span class="keyword">of</span> <span class="constructor">Client_id</span>.t * <span class="constructor">Core</span>.<span class="constructor">Std</span>.<span class="constructor">Sexp</span>.t<br> <span class="keywordsign">|</span> <span class="constructor">Denied_access</span> <span class="keyword">of</span> string<br> <span class="keywordsign">|</span> <span class="constructor">Data</span> <span class="keyword">of</span> <span class="constructor">Client_id</span>.t * <span class="constructor">Client_message</span>.t<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">type</span> t = <span class="constructor">Typed_tcp</span>.<span class="constructor">Make</span>(<span class="constructor">Arg</span>).t<br> <span class="keyword">val</span> create :<br> ?max_pending_connections:int <span class="keywordsign">-></span><br> ?verbose:bool <span class="keywordsign">-></span><br> ?log_disconnects:bool <span class="keywordsign">-></span><br> ?buffer_age_limit:[ <span class="keywordsign">`</span><span class="constructor">At_most</span> <span class="keyword">of</span> <span class="constructor">Core</span>.<span class="constructor">Std</span>.<span class="constructor">Time</span>.<span class="constructor">Span</span>.t <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Unlimited</span> ] <span class="keywordsign">-></span><br> port:int <span class="keywordsign">-></span><br> auth:(<span class="constructor">Import</span>.<span class="constructor">Unix</span>.<span class="constructor">Inet_addr</span>.t <span class="keywordsign">-></span><br> int <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Allow</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Deny</span> <span class="keyword">of</span> string option ] <span class="constructor">Import</span>.<span class="constructor">Deferred</span>.t) <span class="keywordsign">-></span><br> unit <span class="keywordsign">-></span> t <span class="constructor">Import</span>.<span class="constructor">Deferred</span>.t<br> <span class="keyword">val</span> listen : t <span class="keywordsign">-></span> <span class="constructor">Server_read_result</span>.t <span class="constructor">Import</span>.<span class="constructor">Pipe</span>.<span class="constructor">Reader</span>.t<br> <span class="keyword">val</span> listen_ignore_errors :<br> t <span class="keywordsign">-></span> (<span class="constructor">Client_id</span>.t * <span class="constructor">Client_message</span>.t) <span class="constructor">Import</span>.<span class="constructor">Pipe</span>.<span class="constructor">Reader</span>.t<br> <span class="keyword">val</span> close : t <span class="keywordsign">-></span> <span class="constructor">Client_id</span>.t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> flushed_time :<br> t <span class="keywordsign">-></span><br> <span class="constructor">Client_id</span>.t <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Client_not_found</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Flushed</span> <span class="keyword">of</span> <span class="constructor">Core</span>.<span class="constructor">Std</span>.<span class="constructor">Time</span>.t <span class="constructor">Import</span>.<span class="constructor">Deferred</span>.t ]<br> <span class="keyword">val</span> has_client_id : t <span class="keywordsign">-></span> <span class="constructor">Client_id</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> send :<br> t <span class="keywordsign">-></span><br> <span class="constructor">Client_id</span>.t <span class="keywordsign">-></span><br> <span class="constructor">Server_message</span>.t <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Drop</span> <span class="keyword">of</span> exn <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Sent</span> <span class="keyword">of</span> <span class="constructor">Core</span>.<span class="constructor">Std</span>.<span class="constructor">Time</span>.t ] <span class="constructor">Import</span>.<span class="constructor">Deferred</span>.t<br> <span class="keyword">val</span> send_ignore_errors : t <span class="keywordsign">-></span> <span class="constructor">Client_id</span>.t <span class="keywordsign">-></span> <span class="constructor">Server_message</span>.t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> send_to_all : t <span class="keywordsign">-></span> <span class="constructor">Server_message</span>.t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> client_addr_port :<br> t <span class="keywordsign">-></span> <span class="constructor">Client_id</span>.t <span class="keywordsign">-></span> (<span class="constructor">Import</span>.<span class="constructor">Unix</span>.<span class="constructor">Inet_addr</span>.t * int) option<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Simple</span> :<br> <span class="keyword">functor</span> (<span class="constructor">Client_message</span> : <span class="constructor">Binable_t</span>) <span class="keywordsign">-></span><br> <span class="keyword">functor</span> (<span class="constructor">Server_message</span> : <span class="constructor">Binable_t</span>) <span class="keywordsign">-></span><br> <span class="keyword">sig</span><br> <span class="keyword">module</span> <span class="constructor">Client_message</span> : <span class="keyword">sig</span> <span class="keyword">type</span> t = <span class="constructor">Client_message</span>.t <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Server_message</span> : <span class="keyword">sig</span> <span class="keyword">type</span> t = <span class="constructor">Server_message</span>.t <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Client_id</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t =<br> <span class="constructor">Typed_tcp</span>.<span class="constructor">Simple</span>(<span class="constructor">Client_message</span>)(<span class="constructor">Server_message</span>).<span class="constructor">Client_id</span>.t<br> <span class="keyword">val</span> ( >= ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( <= ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( = ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( > ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( < ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( <> ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> equal : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> min : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> max : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> ascending : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> descending : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> between : t <span class="keywordsign">-></span> low:t <span class="keywordsign">-></span> high:t <span class="keywordsign">-></span> bool<br> <span class="keyword">module</span> <span class="constructor">Replace_polymorphic_compare</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">val</span> ( >= ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( <= ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( = ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( > ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( < ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> ( <> ) : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> equal : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> min : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> max : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> _squelch_unused_module_warning_ : unit<br> <span class="keyword">end</span><br> <span class="keyword">type</span> comparator =<br> <span class="constructor">Typed_tcp</span>.<span class="constructor">Simple</span>(<span class="constructor">Client_message</span>)(<span class="constructor">Server_message</span>).<span class="constructor">Client_id</span>.comparator<br> <span class="keyword">val</span> validate_lbound :<br> min:t <span class="constructor">Core</span>.<span class="constructor">Comparable_intf</span>.bound <span class="keywordsign">-></span> t <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check<br> <span class="keyword">val</span> validate_ubound :<br> max:t <span class="constructor">Core</span>.<span class="constructor">Comparable_intf</span>.bound <span class="keywordsign">-></span> t <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check<br> <span class="keyword">val</span> validate_bound :<br> min:t <span class="constructor">Core</span>.<span class="constructor">Comparable_intf</span>.bound <span class="keywordsign">-></span><br> max:t <span class="constructor">Core</span>.<span class="constructor">Comparable_intf</span>.bound <span class="keywordsign">-></span> t <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check<br> <span class="keyword">val</span> comparator : (t, comparator) <span class="constructor">Core</span>.<span class="constructor">Comparator</span>.t_<br> <span class="keyword">module</span> <span class="constructor">Map</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">module</span> <span class="constructor">Key</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = t<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">type</span> comparator = comparator<br> <span class="keyword">val</span> comparator : (t, comparator) <span class="constructor">Core</span>.<span class="constructor">Comparator</span>.t_<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Tree</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> <span class="keywordsign">'</span>a t =<br> (<span class="constructor">Key</span>.t, <span class="keywordsign">'</span>a, <span class="constructor">Key</span>.comparator) <span class="constructor">Core</span>.<span class="constructor">Core_map</span>.<span class="constructor">Tree</span>.t<br> <span class="keyword">val</span> empty : <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> singleton : <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> of_alist :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Duplicate_key</span> <span class="keyword">of</span> <span class="constructor">Key</span>.t <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a t ]<br> <span class="keyword">val</span> of_alist_exn : (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> of_alist_multi : (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list t<br> <span class="keyword">val</span> of_alist_fold :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> of_sorted_array :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) array <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="constructor">Core</span>.<span class="constructor">Or_error</span>.t<br> <span class="keyword">val</span> of_sorted_array_unchecked :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) array <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> of_tree : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> invariants : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> is_empty : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> length : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> add : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> add_multi :<br> <span class="keywordsign">'</span>a list t <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list t<br> <span class="keyword">val</span> change :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a option <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> find : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> find_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> remove : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> mem : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> iter :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> iter2 :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b t <span class="keywordsign">-></span><br> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> data:[ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>b<br> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a<br> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ] <span class="keywordsign">-></span><br> unit) <span class="keywordsign">-></span><br> unit<br> <span class="keyword">val</span> map : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> mapi :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> fold :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> fold_right :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> filter :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> filter_map : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> filter_mapi :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> compare_direct :<br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> int) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> equal : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> keys : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t list<br> <span class="keyword">val</span> data : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list<br> <span class="keyword">val</span> to_alist : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list<br> <span class="keyword">val</span> validate :<br> name:(<span class="constructor">Key</span>.t <span class="keywordsign">-></span> string) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check<br> <span class="keyword">val</span> merge :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b t <span class="keywordsign">-></span><br> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ] <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c option) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c t<br> <span class="keyword">val</span> symmetric_diff :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> data_equal:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> (<span class="constructor">Key</span>.t *<br> [ <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Unequal</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>a ])<br> list<br> <span class="keyword">val</span> min_elt : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> min_elt_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> max_elt : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> max_elt_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> for_all : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> exists : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> fold_range_inclusive :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> min:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> max:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> range_to_alist :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> min:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> max:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list<br> <span class="keyword">val</span> prev_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> next_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> rank : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> int option<br> <span class="keyword">val</span> to_tree : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> t_of_sexp :<br> (<span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> sexp_of_t :<br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">type</span> <span class="keywordsign">'</span>a t = (<span class="constructor">Key</span>.t, <span class="keywordsign">'</span>a, <span class="constructor">Key</span>.comparator) <span class="constructor">Core</span>.<span class="constructor">Core_map</span>.t<br> <span class="keyword">val</span> empty : <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> singleton : <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> of_alist :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Duplicate_key</span> <span class="keyword">of</span> <span class="constructor">Key</span>.t <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a t ]<br> <span class="keyword">val</span> of_alist_exn : (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> of_alist_multi : (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list t<br> <span class="keyword">val</span> of_alist_fold :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> of_sorted_array :<br> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) array <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="constructor">Core</span>.<span class="constructor">Or_error</span>.t<br> <span class="keyword">val</span> of_sorted_array_unchecked : (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) array <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> of_tree : <span class="keywordsign">'</span>a <span class="constructor">Tree</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> invariants : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> is_empty : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> length : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> add : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> add_multi :<br> <span class="keywordsign">'</span>a list t <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list t<br> <span class="keyword">val</span> change :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a option <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> find : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> find_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> remove : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> mem : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> iter : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> iter2 :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b t <span class="keywordsign">-></span><br> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> data:[ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ] <span class="keywordsign">-></span><br> unit) <span class="keywordsign">-></span><br> unit<br> <span class="keyword">val</span> map : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> mapi : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> fold :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> fold_right :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> filter :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> filter_map : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> filter_mapi :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> compare_direct :<br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> int) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> equal : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> keys : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t list<br> <span class="keyword">val</span> data : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list<br> <span class="keyword">val</span> to_alist : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list<br> <span class="keyword">val</span> validate :<br> name:(<span class="constructor">Key</span>.t <span class="keywordsign">-></span> string) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check<br> <span class="keyword">val</span> merge :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b t <span class="keywordsign">-></span><br> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ] <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c option) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c t<br> <span class="keyword">val</span> symmetric_diff :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> data_equal:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> (<span class="constructor">Key</span>.t *<br> [ <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Unequal</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>a ])<br> list<br> <span class="keyword">val</span> min_elt : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> min_elt_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> max_elt : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> max_elt_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> for_all : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> exists : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> fold_range_inclusive :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> min:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> max:<span class="constructor">Key</span>.t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> range_to_alist :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> min:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> max:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) list<br> <span class="keyword">val</span> prev_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> next_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> rank : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> int option<br> <span class="keyword">val</span> to_tree : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">Tree</span>.t<br> <span class="keyword">val</span> t_of_sexp :<br> (<span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> sexp_of_t :<br> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">val</span> compare : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> int) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> bin_size_t : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Size</span>.sizer1<br> <span class="keyword">val</span> bin_write_t : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Map_to_safe</span>.writer1<br> <span class="keyword">val</span> bin_write_t_ :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_write_c</span>.writer1<br> <span class="keyword">val</span> bin_read_t : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Map_to_safe</span>.reader1<br> <span class="keyword">val</span> bin_read_t_ : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_read_c</span>.reader1<br> <span class="keyword">val</span> bin_read_t__ :<br> (<span class="keywordsign">'</span>a, int <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_read_c</span>.reader1<br> <span class="keyword">val</span> bin_writer_t : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.<span class="constructor">S1</span>.writer<br> <span class="keyword">val</span> bin_reader_t : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.<span class="constructor">S1</span>.reader<br> <span class="keyword">val</span> bin_t : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a t) <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.<span class="constructor">S1</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Set</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">module</span> <span class="constructor">Elt</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = t<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">type</span> comparator = comparator<br> <span class="keyword">val</span> comparator : (t, comparator) <span class="constructor">Core</span>.<span class="constructor">Comparator</span>.t_<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Tree</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = (<span class="constructor">Elt</span>.t, <span class="constructor">Elt</span>.comparator) <span class="constructor">Core</span>.<span class="constructor">Core_set</span>.<span class="constructor">Tree</span>.t<br> <span class="keyword">val</span> length : t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> is_empty : t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> iter : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> fold :<br> t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>accum <span class="keywordsign">-></span><br> f:(<span class="keywordsign">'</span>accum <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>accum) <span class="keywordsign">-></span> <span class="keywordsign">'</span>accum<br> <span class="keyword">val</span> exists : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> for_all : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> count : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> find : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> find_map : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> to_list : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t list<br> <span class="keyword">val</span> to_array : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t array<br> <span class="keyword">val</span> invariants : t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> mem : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> add : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> remove : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> union : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> inter : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> diff : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> compare_direct : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> equal : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> subset : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> fold_until :<br> t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span><br> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Continue</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Stop</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ]) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> fold_right :<br> t <span class="keywordsign">-></span> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> iter2 :<br> t <span class="keywordsign">-></span><br> t <span class="keywordsign">-></span><br> f:([ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="constructor">Elt</span>.t * <span class="constructor">Elt</span>.t<br> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="constructor">Elt</span>.t<br> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="constructor">Elt</span>.t ] <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span><br> unit<br> <span class="keyword">val</span> filter : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> partition_tf : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> t * t<br> <span class="keyword">val</span> elements : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t list<br> <span class="keyword">val</span> min_elt : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> min_elt_exn : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> max_elt : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> max_elt_exn : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> choose : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> choose_exn : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> split : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t * bool * t<br> <span class="keyword">val</span> group_by :<br> t <span class="keywordsign">-></span> equiv:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> t list<br> <span class="keyword">val</span> find_exn : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> find_index : t <span class="keywordsign">-></span> int <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> remove_index : t <span class="keywordsign">-></span> int <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> to_tree : t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> empty : t<br> <span class="keyword">val</span> singleton : <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> union_list : t list <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_list : <span class="constructor">Elt</span>.t list <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_array : <span class="constructor">Elt</span>.t array <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_sorted_array : <span class="constructor">Elt</span>.t array <span class="keywordsign">-></span> t <span class="constructor">Core</span>.<span class="constructor">Or_error</span>.t<br> <span class="keyword">val</span> of_sorted_array_unchecked : <span class="constructor">Elt</span>.t array <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> stable_dedup_list : <span class="constructor">Elt</span>.t list <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t list<br> <span class="keyword">val</span> map :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) <span class="constructor">Core</span>.<span class="constructor">Core_set</span>.<span class="constructor">Tree</span>.t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t) <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> filter_map :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) <span class="constructor">Core</span>.<span class="constructor">Core_set</span>.<span class="constructor">Tree</span>.t <span class="keywordsign">-></span><br> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option) <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_tree : t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">end</span><br> <span class="keyword">type</span> t = (<span class="constructor">Elt</span>.t, <span class="constructor">Elt</span>.comparator) <span class="constructor">Core</span>.<span class="constructor">Core_set</span>.t<br> <span class="keyword">val</span> length : t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> is_empty : t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> iter : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> fold :<br> t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>accum <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>accum <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>accum) <span class="keywordsign">-></span> <span class="keywordsign">'</span>accum<br> <span class="keyword">val</span> exists : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> for_all : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> count : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> find : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> find_map : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> to_list : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t list<br> <span class="keyword">val</span> to_array : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t array<br> <span class="keyword">val</span> invariants : t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> mem : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> add : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> remove : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> union : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> inter : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> diff : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> compare_direct : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> equal : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> subset : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> fold_until :<br> t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span><br> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Continue</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Stop</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ]) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> fold_right :<br> t <span class="keywordsign">-></span> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> iter2 :<br> t <span class="keywordsign">-></span><br> t <span class="keywordsign">-></span><br> f:([ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="constructor">Elt</span>.t * <span class="constructor">Elt</span>.t<br> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="constructor">Elt</span>.t<br> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="constructor">Elt</span>.t ] <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span><br> unit<br> <span class="keyword">val</span> filter : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> partition_tf : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> t * t<br> <span class="keyword">val</span> elements : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t list<br> <span class="keyword">val</span> min_elt : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> min_elt_exn : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> max_elt : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> max_elt_exn : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> choose : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> choose_exn : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> split : t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t * bool * t<br> <span class="keyword">val</span> group_by :<br> t <span class="keywordsign">-></span> equiv:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> t list<br> <span class="keyword">val</span> find_exn : t <span class="keywordsign">-></span> f:(<span class="constructor">Elt</span>.t <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t<br> <span class="keyword">val</span> find_index : t <span class="keywordsign">-></span> int <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option<br> <span class="keyword">val</span> remove_index : t <span class="keywordsign">-></span> int <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> to_tree : t <span class="keywordsign">-></span> <span class="constructor">Tree</span>.t<br> <span class="keyword">val</span> empty : t<br> <span class="keyword">val</span> singleton : <span class="constructor">Elt</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> union_list : t list <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_list : <span class="constructor">Elt</span>.t list <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_array : <span class="constructor">Elt</span>.t array <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_sorted_array : <span class="constructor">Elt</span>.t array <span class="keywordsign">-></span> t <span class="constructor">Core</span>.<span class="constructor">Or_error</span>.t<br> <span class="keyword">val</span> of_sorted_array_unchecked : <span class="constructor">Elt</span>.t array <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> stable_dedup_list : <span class="constructor">Elt</span>.t list <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t list<br> <span class="keyword">val</span> map : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) <span class="constructor">Core</span>.<span class="constructor">Core_set</span>.t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t) <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> filter_map :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) <span class="constructor">Core</span>.<span class="constructor">Core_set</span>.t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">Elt</span>.t option) <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> of_tree : <span class="constructor">Tree</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> bin_size_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Size</span>.sizer<br> <span class="keyword">val</span> bin_write_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Map_to_safe</span>.writer<br> <span class="keyword">val</span> bin_write_t_ : t <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_write_c</span>.writer<br> <span class="keyword">val</span> bin_read_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Read_ml</span>.reader<br> <span class="keyword">val</span> bin_read_t_ : t <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_read_c</span>.reader<br> <span class="keyword">val</span> bin_read_t__ : (int <span class="keywordsign">-></span> t) <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_read_c</span>.reader<br> <span class="keyword">val</span> bin_writer_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.writer<br> <span class="keyword">val</span> bin_reader_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.reader<br> <span class="keyword">val</span> bin_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Hashable</span> : <span class="keyword">sig</span> <span class="keyword">type</span> t = t <span class="keyword">end</span><br> <span class="keyword">val</span> hash : t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> hashable : t <span class="constructor">Core</span>.<span class="constructor">Hashable</span>.<span class="constructor">Hashtbl</span>.<span class="constructor">Hashable</span>.t<br> <span class="keyword">module</span> <span class="constructor">Table</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> key = t<br> <span class="keyword">type</span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) hashtbl = (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) <span class="constructor">Core</span>.<span class="constructor">Hashable</span>.<span class="constructor">Hashtbl</span>.t<br> <span class="keyword">type</span> <span class="keywordsign">'</span>b t = (key, <span class="keywordsign">'</span>b) hashtbl<br> <span class="keyword">type</span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ = <span class="keywordsign">'</span>b t<br> <span class="keyword">type</span> <span class="keywordsign">'</span>a key_ = key<br> <span class="keyword">val</span> hashable : key <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.<span class="constructor">Hashable</span>.t<br> <span class="keyword">val</span> create :<br> (<span class="keywordsign">'</span>a key_, unit <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_)<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> of_alist :<br> (<span class="keywordsign">'</span>a key_,<br> (<span class="keywordsign">'</span>a key_ * <span class="keywordsign">'</span>b) list <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Duplicate_key</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> <span class="keyword">of</span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ ])<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> of_alist_report_all_dups :<br> (<span class="keywordsign">'</span>a key_,<br> (<span class="keywordsign">'</span>a key_ * <span class="keywordsign">'</span>b) list <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Duplicate_keys</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a key_ list <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> <span class="keyword">of</span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ ])<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> of_alist_exn :<br> (<span class="keywordsign">'</span>a key_, (<span class="keywordsign">'</span>a key_ * <span class="keywordsign">'</span>b) list <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_)<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> of_alist_multi :<br> (<span class="keywordsign">'</span>a key_, (<span class="keywordsign">'</span>a key_ * <span class="keywordsign">'</span>b) list <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b list) t_)<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> create_mapped :<br> (<span class="keywordsign">'</span>a key_,<br> get_key:(<span class="keywordsign">'</span>r <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_) <span class="keywordsign">-></span><br> get_data:(<span class="keywordsign">'</span>r <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>r list <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Duplicate_keys</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a key_ list <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> <span class="keyword">of</span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ ])<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> create_with_key :<br> (<span class="keywordsign">'</span>a key_,<br> get_key:(<span class="keywordsign">'</span>r <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>r list <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Duplicate_keys</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a key_ list <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> <span class="keyword">of</span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>r) t_ ])<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> create_with_key_exn :<br> (<span class="keywordsign">'</span>a key_,<br> get_key:(<span class="keywordsign">'</span>r <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_) <span class="keywordsign">-></span> <span class="keywordsign">'</span>r list <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>r) t_)<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> group :<br> (<span class="keywordsign">'</span>a key_,<br> get_key:(<span class="keywordsign">'</span>r <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_) <span class="keywordsign">-></span><br> get_data:(<span class="keywordsign">'</span>r <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span><br> combine:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>r list <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_)<br> <span class="constructor">Core</span>.<span class="constructor">Core_hashtbl_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> sexp_of_key : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">val</span> clear : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> copy : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_<br> <span class="keyword">val</span> invariant : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> fold :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>c <span class="keywordsign">-></span> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c <span class="keywordsign">-></span> <span class="keywordsign">'</span>c) <span class="keywordsign">-></span> <span class="keywordsign">'</span>c<br> <span class="keyword">val</span> iter :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> existsi :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> exists : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> length : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> is_empty : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> mem : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> remove : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> remove_one : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b list) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> replace : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> set : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> add :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Duplicate</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> ]<br> <span class="keyword">val</span> add_exn : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> change :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> (<span class="keywordsign">'</span>b option <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> add_multi :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b list) t_ <span class="keywordsign">-></span> key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> remove_multi : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b list) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> map : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>c) t_<br> <span class="keyword">val</span> mapi :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>c) t_<br> <span class="keyword">val</span> filter_map :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c option) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>c) t_<br> <span class="keyword">val</span> filter_mapi :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>c option) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>c) t_<br> <span class="keyword">val</span> filter : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_<br> <span class="keyword">val</span> filteri :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_<br> <span class="keyword">val</span> partition_map :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Fst</span> <span class="keyword">of</span> <span class="keywordsign">'</span>c <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Snd</span> <span class="keyword">of</span> <span class="keywordsign">'</span>d ]) <span class="keywordsign">-></span><br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>c) t_ * (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>d) t_<br> <span class="keyword">val</span> partition_mapi :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Fst</span> <span class="keyword">of</span> <span class="keywordsign">'</span>c <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Snd</span> <span class="keyword">of</span> <span class="keywordsign">'</span>d ]) <span class="keywordsign">-></span><br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>c) t_ * (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>d) t_<br> <span class="keyword">val</span> partition_tf :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ * (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_<br> <span class="keyword">val</span> partitioni_tf :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span><br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ * (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_<br> <span class="keyword">val</span> find_or_add :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> default:(unit <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> find : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option<br> <span class="keyword">val</span> find_exn : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">val</span> find_and_remove : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option<br> <span class="keyword">val</span> iter_vals : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> merge :<br> (<span class="keywordsign">'</span>k, <span class="keywordsign">'</span>a) t_ <span class="keywordsign">-></span><br> (<span class="keywordsign">'</span>k, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span><br> f:(key:<span class="keywordsign">'</span>k key_ <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Both</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a * <span class="keywordsign">'</span>b <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Left</span> <span class="keyword">of</span> <span class="keywordsign">'</span>a <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Right</span> <span class="keyword">of</span> <span class="keywordsign">'</span>b ] <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>c option) <span class="keywordsign">-></span><br> (<span class="keywordsign">'</span>k, <span class="keywordsign">'</span>c) t_<br> <span class="keyword">val</span> merge_into :<br> f:(key:<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span><br> src:(<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> dst:(<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> keys : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ list<br> <span class="keyword">val</span> data : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>b list<br> <span class="keyword">val</span> filter_inplace : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> filteri_inplace :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> equal :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> to_alist : (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a key_ * <span class="keywordsign">'</span>b) list<br> <span class="keyword">val</span> validate :<br> name:(<span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> string) <span class="keywordsign">-></span><br> <span class="keywordsign">'</span>b <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>b) t_ <span class="constructor">Core</span>.<span class="constructor">Validate</span>.check<br> <span class="keyword">val</span> incr : ?by:int <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a, int) t_ <span class="keywordsign">-></span> <span class="keywordsign">'</span>a key_ <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> t_of_sexp :<br> (<span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t<br> <span class="keyword">val</span> sexp_of_t :<br> (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Hash_set</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> elt = t<br> <span class="keyword">type</span> <span class="keywordsign">'</span>a hash_set = <span class="keywordsign">'</span>a <span class="constructor">Core</span>.<span class="constructor">Hash_set</span>.t<br> <span class="keyword">type</span> t = elt hash_set<br> <span class="keyword">type</span> <span class="keywordsign">'</span>a t_ = t<br> <span class="keyword">type</span> <span class="keywordsign">'</span>a elt_ = elt<br> <span class="keyword">val</span> create :<br> (<span class="keywordsign">'</span>a, unit <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t_)<br> <span class="constructor">Core</span>.<span class="constructor">Hash_set_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> of_list :<br> (<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>a elt_ list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t_)<br> <span class="constructor">Core</span>.<span class="constructor">Hash_set_intf</span>.create_options_without_hashable<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Hash_queue</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">module</span> <span class="constructor">Key</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = t<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> hash : t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">type</span> <span class="keywordsign">'</span>a t =<br> <span class="keywordsign">'</span>a<br> <span class="constructor">Typed_tcp</span>.<span class="constructor">Simple</span>(<span class="constructor">Client_message</span>)(<span class="constructor">Server_message</span>).<span class="constructor">Client_id</span>.<span class="constructor">Hash_queue</span>.t<br> <span class="keyword">val</span> length : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> is_empty : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> iter : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> fold :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>accum <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>accum <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>accum) <span class="keywordsign">-></span> <span class="keywordsign">'</span>accum<br> <span class="keyword">val</span> exists : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> for_all : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> count : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> find : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> find_map : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option<br> <span class="keyword">val</span> to_list : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list<br> <span class="keyword">val</span> to_array : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a array<br> <span class="keyword">val</span> invariant : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> create : unit <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> clear : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> mem : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> lookup : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> lookup_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> enqueue :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Key_already_present</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> ]<br> <span class="keyword">val</span> enqueue_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> first : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> keys : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t list<br> <span class="keyword">val</span> dequeue : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> dequeue_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> dequeue_with_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> dequeue_with_key_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> dequeue_all : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> remove : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">No_such_key</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> ]<br> <span class="keyword">val</span> remove_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> replace : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">No_such_key</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> ]<br> <span class="keyword">val</span> replace_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> iteri :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> foldi :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> init:<span class="keywordsign">'</span>b <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>b <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Hash_heap</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">module</span> <span class="constructor">Key</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t = t<br> <span class="keyword">val</span> compare : t <span class="keywordsign">-></span> t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> hash : t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">type</span> <span class="keywordsign">'</span>a t =<br> <span class="keywordsign">'</span>a<br> <span class="constructor">Typed_tcp</span>.<span class="constructor">Simple</span>(<span class="constructor">Client_message</span>)(<span class="constructor">Server_message</span>).<span class="constructor">Client_id</span>.<span class="constructor">Hash_heap</span>.t<br> <span class="keyword">val</span> create : ?min_size:int <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> int) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> copy : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t<br> <span class="keyword">val</span> push :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> [ <span class="keywordsign">`</span><span class="constructor">Key_already_present</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Ok</span> ]<br> <span class="keyword">val</span> push_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> replace : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> remove : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> mem : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> top : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> top_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> top_with_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> top_with_key_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> pop_with_key : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> pop_with_key_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> pop : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> pop_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> cond_pop_with_key :<br> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span><br> (key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> (<span class="constructor">Key</span>.t * <span class="keywordsign">'</span>a) option<br> <span class="keyword">val</span> cond_pop : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> find : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> find_pop : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a option<br> <span class="keyword">val</span> find_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> find_pop_exn : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="constructor">Key</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a<br> <span class="keyword">val</span> iter : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(key:<span class="constructor">Key</span>.t <span class="keywordsign">-></span> data:<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> iter_vals : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> f:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> length : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> int<br> <span class="keyword">end</span><br> <span class="keyword">val</span> of_int_exn : int <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> to_int_exn : t <span class="keywordsign">-></span> int<br> <span class="keyword">val</span> of_string : string <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> to_string : t <span class="keywordsign">-></span> string<br> <span class="keyword">val</span> create : unit <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">val</span> bin_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.t<br> <span class="keyword">val</span> bin_read_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Read_ml</span>.reader<br> <span class="keyword">val</span> bin_read_t_ : t <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_read_c</span>.reader<br> <span class="keyword">val</span> bin_read_t__ : (int <span class="keywordsign">-></span> t) <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_read_c</span>.reader<br> <span class="keyword">val</span> bin_reader_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.reader<br> <span class="keyword">val</span> bin_size_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Size</span>.sizer<br> <span class="keyword">val</span> bin_write_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Write_ml</span>.writer<br> <span class="keyword">val</span> bin_write_t_ : t <span class="constructor">Bin_prot</span>.<span class="constructor">Unsafe_write_c</span>.writer<br> <span class="keyword">val</span> bin_writer_t : t <span class="constructor">Bin_prot</span>.<span class="constructor">Type_class</span>.writer<br> <span class="keyword">end</span><br> <span class="keyword">module</span> <span class="constructor">Server_read_result</span> :<br> <span class="keyword">sig</span><br> <span class="keyword">type</span> t =<br> <span class="constructor">Typed_tcp</span>.<span class="constructor">Simple</span>(<span class="constructor">Client_message</span>)(<span class="constructor">Server_message</span>).<span class="constructor">Server_read_result</span>.t =<br> <span class="constructor">Connect</span> <span class="keyword">of</span> <span class="constructor">Client_id</span>.t<br> <span class="keywordsign">|</span> <span class="constructor">Disconnect</span> <span class="keyword">of</span> <span class="constructor">Client_id</span>.t * <span class="constructor">Core</span>.<span class="constructor">Std</span>.<span class="constructor">Sexp</span>.t<br> <span class="keywordsign">|</span> <span class="constructor">Denied_access</span> <span class="keyword">of</span> string<br> <span class="keywordsign">|</span> <span class="constructor">Data</span> <span class="keyword">of</span> <span class="constructor">Client_id</span>.t * <span class="constructor">Client_message</span>.t<br> <span class="keyword">val</span> t_of_sexp : <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t <span class="keywordsign">-></span> t<br> <span class="keyword">val</span> sexp_of_t : t <span class="keywordsign">-></span> <span class="constructor">Sexplib</span>.<span class="constructor">Sexp</span>.t<br> <span class="keyword">end</span><br> <span class="keyword">type</span> t = <span class="constructor">Typed_tcp</span>.<span class="constructor">Simple</span>(<span class="constructor">Client_message</span>)(<span class="constructor">Server_message</span>).t<br> <span class="keyword">val</span> create :<br> ?max_pending_connections:int <span class="keywordsign">-></span><br> ?verbose:bool <span class="keywordsign">-></span><br> ?log_disconnects:bool <span class="keywordsign">-></span><br> ?buffer_age_limit:[ <span class="keywordsign">`</span><span class="constructor">At_most</span> <span class="keyword">of</span> <span class="constructor">Core</span>.<span class="constructor">Std</span>.<span class="constructor">Time</span>.<span class="constructor">Span</span>.t <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Unlimited</span> ] <span class="keywordsign">-></span><br> port:int <span class="keywordsign">-></span><br> auth:(<span class="constructor">Import</span>.<span class="constructor">Unix</span>.<span class="constructor">Inet_addr</span>.t <span class="keywordsign">-></span><br> int <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Allow</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Deny</span> <span class="keyword">of</span> string option ] <span class="constructor">Import</span>.<span class="constructor">Deferred</span>.t) <span class="keywordsign">-></span><br> unit <span class="keywordsign">-></span> t <span class="constructor">Import</span>.<span class="constructor">Deferred</span>.t<br> <span class="keyword">val</span> listen : t <span class="keywordsign">-></span> <span class="constructor">Server_read_result</span>.t <span class="constructor">Import</span>.<span class="constructor">Pipe</span>.<span class="constructor">Reader</span>.t<br> <span class="keyword">val</span> listen_ignore_errors :<br> t <span class="keywordsign">-></span> (<span class="constructor">Client_id</span>.t * <span class="constructor">Client_message</span>.t) <span class="constructor">Import</span>.<span class="constructor">Pipe</span>.<span class="constructor">Reader</span>.t<br> <span class="keyword">val</span> close : t <span class="keywordsign">-></span> <span class="constructor">Client_id</span>.t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> flushed_time :<br> t <span class="keywordsign">-></span><br> <span class="constructor">Client_id</span>.t <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Client_not_found</span><br> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Flushed</span> <span class="keyword">of</span> <span class="constructor">Core</span>.<span class="constructor">Std</span>.<span class="constructor">Time</span>.t <span class="constructor">Import</span>.<span class="constructor">Deferred</span>.t ]<br> <span class="keyword">val</span> has_client_id : t <span class="keywordsign">-></span> <span class="constructor">Client_id</span>.t <span class="keywordsign">-></span> bool<br> <span class="keyword">val</span> send :<br> t <span class="keywordsign">-></span><br> <span class="constructor">Client_id</span>.t <span class="keywordsign">-></span><br> <span class="constructor">Server_message</span>.t <span class="keywordsign">-></span><br> [ <span class="keywordsign">`</span><span class="constructor">Drop</span> <span class="keyword">of</span> exn <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Sent</span> <span class="keyword">of</span> <span class="constructor">Core</span>.<span class="constructor">Std</span>.<span class="constructor">Time</span>.t ] <span class="constructor">Import</span>.<span class="constructor">Deferred</span>.t<br> <span class="keyword">val</span> send_ignore_errors :<br> t <span class="keywordsign">-></span> <span class="constructor">Client_id</span>.t <span class="keywordsign">-></span> <span class="constructor">Server_message</span>.t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> send_to_all : t <span class="keywordsign">-></span> <span class="constructor">Server_message</span>.t <span class="keywordsign">-></span> unit<br> <span class="keyword">val</span> client_addr_port :<br> t <span class="keywordsign">-></span> <span class="constructor">Client_id</span>.t <span class="keywordsign">-></span> (<span class="constructor">Import</span>.<span class="constructor">Unix</span>.<span class="constructor">Inet_addr</span>.t * int) option<br> <span class="keyword">end</span><br> <span class="keyword">end</span></code></body></html>