Caml1999I0376 )(+Stdlib__Map+OrderedType{!t;@@@A@@@@@'map.mliss@@@@@@A@'compare@@@@@@@@#intA@@@@@@@@vv@@-A@@@@q ~  @1B@@!S|#key;@@@A@@@@@0F # '1F # /@@@@BC@A@!t;!a@@A@A@I@B@@@AI V ZBI V e@@@@SD@A@%empty!a@@@@@SL  TL  @@eE@@#add@5@@@@!a@@  @@@$ @@@@@@@@@@rO  sO  @@F@@+add_to_list@@@@@!a@@>$listK@@@@@@I @@@@@@@@@@@@@X  X  @@G@@&update@I@@@@@&optionL!a@@@@  @@@@@@v@@@z@@@@@@@@@@^^@@H@@)singleton@u@@@@!a@@@@@@@@@jW[jW{@@I@@&remove@@@@@!a@@@@@@@@@@@@oo@@J@@%merge@@@@@@`!a@@@@@k!b@@@@t!c@@@@@@@@@@@@@@@@@@@@@@@@@@@@;vY]<x@@MK@@%union@@@@@@!a@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@hfjif@@zL@@(cardinal@)!a@@@@f@@@@@@@@M@@(bindings@@!a@@@@@<@@@@@@@@@@@@8<8a@@N@@+min_binding@a!a@@@@@Y@@@@@@@@@bfb@@O@@/min_binding_opt@}!a@@@@!@y@@@@@@@@@ @@ @JNJ|@@P@@+max_binding@!a@ @@@ @@@@ @@@@@@484[@@ Q@@/max_binding_opt@!a@@@@^@@@@@@@@@@@@@ @@,R@@&choose@۠!a@@@@@@@@@@@@@@67@@HS@@*choose_opt@!a@@@@@@@@@@@@@@@@ @WX@@iT@@$find@@@@!@!a@#@@@"@@$@@%@op@@U@@(find_opt@@@@&@5!a@(@@@'٠ @@@)@@*@@+@IMIs@@V@@*find_first@@;@@@,$boolE@@@-@@.@Z!a@0@@@/@R@@@1@@@2@@3@@4@    D@@W@@.find_first_opt@@d@@@5)@@@6@@7@!a@9@@@8%@}@@@:@@@;@@@<@@=@@>@"*"."*"l@@X@@)find_last@@@@@?U@@@@@@A@!a@C@@@B@@@@D@@@E@@F@@G@#_#c #_#@@Y@@-find_last_opt@@@@@H|@@@I@@J@Ԡ!a@L@@@Kx@@@@M@@@N@@@O@@P@@Q@4$y$}5$y$@@FZ@@$iter@@@@@R@!a@V$unitF@@@S@@T@@U@@@@W @@@X@@Y@@Z@Z%%[%& @@l[@@$fold@@ @@@[@!a@_@#acc@a@@\@@]@@^@.@@@`@  @@b@@c@@d@~'%')'3'l@@\@@#map@@!a@f!b@h@@e@K @@@gO @@@i@@j@@k@(e(i(e(@@]@@$mapi@@L@@@l@!a@o!b@q@@m@@n@o @@@ps @@@r@@s@@t@))))@@^@@&filter@@p@@@u@!a@z;@@@v@@w@@x@ @@@y@@@{@@|@@}@****@@_@@*filter_map@@@@@~@!a@M!b@@@@@@@@@@@@@@@@@@@@ ,, ,,?@@ `@@)partition@@@@@@!a@@@@@@@@@ @@@@@@@@@@@@@@@@@@<..=./%@@Na@@%split@@@@@!a@@@@@ @@@@@@@@@@@@@@@@@@i$0'0+j$0'0\@@{b@@(is_empty@*!a@@@@@@@@@@022!022;@@c@@#mem@-@@@@F!a@@@@@@@@@@@@32l2p32l2@@d@@%equal@@!a@@@@@@@@@@k@@@@q@@@#@@@@@@@@@@722723-@@e@@'compare@@!a@@@@@@@@@@@@@@@@@@@@@@@@@@@=4(4,=4(4a@@f@@'for_all@@@@@@!a@d@@@@@@@@ @@@n@@@@@@@@A45A450@@ g@@&exists@@@@@@!a@@@@@@@@@ @@@@@@@@@@@2F553F55@@Dh@@'to_list@!a@@@@@@@@Π@@@@@@@@@SM6~6TM6~6@@ei@@'of_list@Ӡ@@@@Ҡ@!a@@@@@@&@@@@@@tQ66uQ67@@j@@&to_seq@5!a@@@@&Stdlib#Seq!t@7@@@ڠ@@@@@@@@@W77W77@@k@@*to_rev_seq@\!a@@@@'#Seq!t@[@@@ࠠ@@@@@@@@@[8A8E[8A8n@@l@@+to_seq_from@l@@@@!a@@@@P#Seq!t@@@@砠@@@@@@@@@@@_88_88@@m@@'add_seq@l#Seq!t@@@@젠@!a@@@@@@@ @@@Ġ@@@@@@@@d99d99@@$n@@&of_seq@#Seq!t@@@@@!a@@@@@@@@@@@@6h::7h::>@@Ho@@@@:A  ;k::@Lp@@Ӡ$Make}@#Ord~U!;@@@A!t@@@i@@@@Wn::Xn::@@@@ir@A@';&@j@A@A@#"@@!@@@A@ @k@@@l@@@@(@@@m@@o@@@@n @@@p@@q@@r@@s@@@ @@@@t@ @w@+  @@@u@@@v3@@@x@@@y@@z@@{@@|@@@@5@@@}@@@@@@~@@@@@@S @@@W@@@@@@@@@@@@@U@@@@@g@@@@@@@@@@@e@@@@v@@@@{@@@@@@@@@@@@{@@@@@@@@@@@@@ܠ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Р@@@@@@@@@@à @@@@ɠ@@@͠@@@@@@@@@@@@@נ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@)@@@@@&@@@Š@ @@@@@@@@=@@@@@=@@@ʠ@@@@@@@@@@@@U@@@@@R@@@Р@ @@@@@@@@i@@@@@i@@@ՠ@@@@@@@@@@@@u@@@@@@@@@@@@@@@~@@@@@}@@@@z@@@@@@@@y@v@u@@@@@t@@@@@@q@@@@@@@@頠@ @@@@@@@n@k@j@@@@@i@@@@@@͠h@@@@e@@@@@@@@@@@@@@@d@a@`@@@@@_@@@@@@^@@@@@@@@@ @@@@@@@[@X@W@@@@@V@@@@@@ U@@@@R@ @@@@@@@@@@@@@ @Q@N@M@@@@@ @L@I@@@ @@ @@ @2 @@@F@@@@@@@@E@B@A@@5@@@@@@@=@@@@@@@@L @@@@  @@@@@@@:@7@6@@5@2@ @@@^@@@b @@@!@@"@@#@/@,@+@@b@@@$@*@''@)@@%@@&@w@@@({ @@@*@@+@@,@$@!@ @@{@@@-@@2@@@.@@/@@0@ @@@1 @@@3@@4@@5@@@@@@@@6@@:@<@@@7@@8@@9@ @@@; @@@=@@>@@?@@ @ @@@@@@@ @F@@@A@@B@@C@ʠ @@@D@Ҡ@@@G@ؠ@@@E@@H@@I@@J@@@@@@@K@@O@@@L@ @@@P@@@@N@@@@M@@Q@@R@@S@@@@@T@@@U@@@V@@W@@@@@@@X@@Y@@@Z@@@[@@\@@]@@@@@@b@@@@^@@_@@`@1 @@@a@7@@@c@@@d@@e@@f@@g@@@@@@l@@@@h@@i@@j@N @@@k@T@@@m@@@n@@o@@p@@q@@@@@W@@@r@@v@@@s@@t@@u@n @@@w@@@x@@y@@z@@@@@q@@@{@@@@@|@@}@@~@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Š@@@@@@@@@@@@@@@@@@@@ߠ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*@@@. @@@@@@@@@@@@5@@@@@@@@@@H@@@@@@|@y@@@ n::[@ s@@@@^L+Stdlib__Map0L5xE|O0~,J-+Stdlib__Seq0nwzG&amg.Stdlib__Either0Vy`u~c à&Stdlib0Lku]8_٠8CamlinternalFormatBasics0%FU(Q/Tu@@@Caml1999T037=!QC+Stdlib__Map*ocaml.text&_none_@@A  Association tables over ordered types. This module implements applicative association tables, also known as finite maps or dictionaries, given a total ordering function over the keys. All operations over maps are purely applicative (no side-effects). The implementation uses balanced binary trees, and therefore searching and insertion take time logarithmic in the size of the map. For instance: {[ module IntPairs = struct type t = int * int let compare (x0,y0) (x1,y1) = match Stdlib.compare x0 x1 with 0 -> Stdlib.compare y0 y1 | c -> c end module PairsMap = Map.Make(IntPairs) let m = PairsMap.(empty |> add (0,1) "hello" |> add (1,0) "world") ]} This creates a new module [PairsMap], with a new type ['a PairsMap.t] of maps from [int * int] to ['a]. In this example, [m] contains [string] values so its type is [string PairsMap.t]. 'map.mliSo@@@@@@3@@@@@@#intA;@@#intA@@@@@;@A@$charB;@@$charA@@@@@A@A@&stringQ;@@&stringA@@@@@G@@@%bytesC;@@%bytesA@@@@@M@@@%floatD;@@%floatA@@@@@S@@@$boolE;@@%falsec@@]@$trued@@c@@@A@@@@@d@A@$unitF;@@"()e@@n@@@A@@@@@o@A@ #exnG;@@@A@@@@@s@@@#effH;@@O@A@A@@@@@@|@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@@@@%arrayJ;@@R@A%arrayA@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@)nativeintA@@@@@@@@%int32N;@@%int32A@@@@@@@@%int64O;@@%int64A@@@@@@@@&lazy_tP;@@X@A&lazy_tA@Y@@@@@@@@ 5extension_constructorR;@@5extension_constructorA@@@@@@@@*floatarrayS;@@*floatarrayA@@@@@@@@&iarrayT;@@Y@A&iarrayA@Y@@@@@@@@ *atomic_locU;@@Z@A*atomic_locA@@@@@@ @@@ .Assert_failure`#@@@@@J@@@@@@@@[@@A!=ocaml.warn_on_literal_pattern%@&@0Division_by_zero]#@@@A+ . .@+End_of_file\#$@@@A366@'FailureY#,@'@@A<??@0Invalid_argumentX#5@0@@AE$H#H@-Match_failureV#>@@=@9@;@@a@@AV5Y4Y@)Not_foundZ#O@@@A^=a<a@-Out_of_memoryW#W@@@AfEiDi@.Stack_overflow^#_@@@AnMqLq@.Sys_blocked_io_#g@@@AvUyTy@)Sys_error[#o@j@@A^]@:Undefined_recursive_modulea#x@@w@s@u@@h@@Aon@:Continuation_already_takenb#@@@Awv@&Stdlib@A+OrderedTypeBqq@B@БA+!tAss@@;@@@A@@@@@s@)ocaml.doc; The type of the map keys. tt@@@@@@@@@@@@@A@ѐ@@@@@@@3@@A#@'comparevv@б@г7!tvv@@ @@@3@B<@A@@б@гH!tvv@@ @@@@@гҠ#intvv@@ @@@@@@@@!@@@'@@$* @@@ v@^  A total ordering function over the keys. This is a two-argument function [f] such that [f e1 e2] is zero if the keys [e1] and [e2] are equal, [f e1 e2] is strictly negative if [e1] is smaller than [e2], and [f e1 e2] is strictly positive if [e1] is greater than [e2]. Example: a suitable ordering function is the generic structural comparison function {!Stdlib.compare}. w  }  @@@@@@@3A@@@n.@@@@@@C@A@["@@3*))*****@H]$@A3-,,-----@+@A2r3~  @@D ) Input signature of the functor {!Make}. A  B  @@@@@@@Dq@B@!SENA  OA  @gp@Бhg/ {1:maps Maps} dD  eD  !@@@@@@3cbbccccc@bA@d@@:9@99@@@9@9@6@AA+#keyCF # ,F # /@@;@@A@@@@@F # '@א; The type of the map keys. G 0 4G 0 T@@@@@@@@@C@@@A@@@@@@@@;@A+!tDI V dI V e@А!a@3@Q:4;@@@A@A@G@B@@@I V Z@ 0 The type of maps from type [key] to type ['a]. J f jJ f @@@@@@@@@D@@AI V aI V c@@@@@;$@A)A@I@B@@@@@ @@A@(萠@@@@@@@3@-@A%9@%emptyL  L  @гK!tL  L  @А!a@E@3@L\/@AL  L  @@@ @@@ @@@ L  @^0 The empty map. M  M  @@@@@@@3E@@'@n.@@@@@@(#add1O  2O  @б@г#key<O  =O  @@ @@@3>==>>>>>@AZ8@A@@б@А!a@E@ OO  PO  @@б@г!tZO  [O  @А!aaO  bO  @@@@@@& @@гĠ!toO  pO  @А!a,4vO  wO  @@@2@@@; @@@@@>@@@9@@A4@@@G@@DJ@@@O  @ِ  [add key data m] returns a map containing the same bindings as [m], plus a binding of [key] to [data]. If [key] was already bound in [m] to a value that is physically equal to [data], [m] is returned unchanged (the result of the function is then physically equal to [m]). Otherwise, the previous binding of [key] in [m] disappears. @before 4.03 Physical equality was not ensured. P  V s @@@@@@@F@@)@@@@@@@c+add_to_listX  X  @б@г5#keyX  X  @@ @@@3@|8@A@@б@А!a@E@ X  X  @@б@г*!tX  X  @гP$listX  X  @А!a!)X  X  @@@'@@@0 @@@@@@5 @@гN!tX  X  @гt$listX  X  @А!aEM X   X  @@@K@@@T @@@@@@Y @@@+@@\3@@@W@@_R"@@@e@@bh%@@@!X  (@r [add_to_list key data m] is [m] with [key] mapped to [l] such that [l] is [data :: Map.find key m] if [key] was bound in [m] and [[data]] otherwise. @since 5.1 .Y  /\@@@@@@@GG@@8@B@@@@@@&updateE^F^@б@гΠ#keyP^Q^@@ @@@3RQQRRRRR@8@A@@б@б@г&optionc^d^@А!a@E@o^p^@@@ @@@ @@гѠ&option}^~^@А!a.^^@@@ @@@5 @@@@@8@@б@г점!t^^@А!a4H^^@@@:@@@O @@г!t^^@А!aI]^^@@@O@@@d @@@@@g@@@4@@j^@@@q@@nt@@@^@ ` [update key f m] returns a map containing the same bindings as [m], except for the binding of [key]. Depending on the value of [y] where [y] is [f (find_opt key m)], the binding of [key] is added, removed or updated. If [y] is [None], the binding is removed if it exists; otherwise, if [y] is [Some z] then [key] is associated to [z] in the resulting map. If [key] was already bound in [m] to a value that is physically equal to [z], [m] is returned unchanged (the result of the function is then physically equal to [m]). @since 4.06 _h?U@@@@@@@H@@*@'琠@@@@@@)singletonjW_jWh@б@гs#keyjWjjWm@@ @@@3@8@A@@б@А!a@E@ jWq jWs@@гf!tjWzjW{@А!ajWwjWy@@@@@@$ @@@@@'@@@-@@*0@@@'jW[@x n [singleton x y] returns the one-element map that contains a binding [y] for [x]. @since 3.12 4k|5m@@@@@@@MI@@&@H@@@@@@I&removeKoLo@б@гԠ#keyVoWo@@ @@@3XWWXXXXX@bw8@A@@б@г!tgoho@А!a@E@so to@@@ @@@@@г֠!too@А!a,oo@@@ @@@3 @@@@@6@@@<@@9?@@@o@萠 5 [remove x m] returns a map containing the same bindings as [m], except for [x] which is unbound in the returned map. If [x] was not in [m], [m] is returned unchanged (the result of the function is then physically equal to [m]). @before 4.03 Physical equality was not ensured. ptW@@@@@@@J@@&@@@@@@@X%mergevYavYf@б@б@гF#keywhowhr@@ @@@3@s:@A@@б@г-&optionwhywh@А!a@E@whvwhx@@@ @@@@@б@гI&optionwhwh@А!b@E@3whwh@@@ @@@:@@гc&optionwhwh@А!c@E@Mwhwh@@@ @@@T@@@!@@W$@@@@@@ZC@@@`@@]c@@б@г!t4x5x@А!a[m;x<x@@@a@@@t @@б@г!tKxLx@А!bVRxSx@@@\@@@ @@г!t`xax@А!cQgxhx@@@W@@@ @@@@@@@@6@@9@@@N@@wwhn@@@zvY]@ː  [merge f m1 m2] computes a map whose keys are a subset of the keys of [m1] and of [m2]. The presence of each such binding, and the corresponding value, is determined with the function [f]. In terms of the [find_opt] operation, we have [find_opt x (merge f m1 m2) = f x (find_opt x m1) (find_opt x m2)] for any key [x], provided that [f x None None = None]. @since 3.12 yNd@@@@@@@K@@*@@@@@@@%unionfnfs@б@б@г)#keyfvfy@@ @@@3@:@A@@б@А!a@E@ f}f@@б@А!a ff@@г#&optionff@А!a%ff@@@#@@@, @@@'@@ /@@@*@@ 2%@@@8@@ 5;@@б@гD!tff@А!a=Eff@@@C@@@ L @@б@г[!tff@А!aT\ ff@@@Z@@@c @@гp!tff@А!aiq"f#f@@@o@@@x @@@@@{@@@6@@~9@@@N@@2fu@@@5fj@  [union f m1 m2] computes a map whose keys are a subset of the keys of [m1] and of [m2]. When the same binding is defined in both arguments, the function [f] is used to combine them. This is a special case of [merge]: [union f m1 m2] is equivalent to [merge f' m1 m2], where - [f' _key None None = None] - [f' _key (Some v) None = Some v] - [f' _key None (Some v) = Some v] - [f' key (Some v1) (Some v2) = f key v1 v2] @since 4.03 BC@@@@@@@[L@@*@V@@@@@@(cardinalYZ@б@г!tde@А!a@E@3lkklllll@>@Ars@@@ @@@ @@гS#int@@ @@@@@@@@@@@ @ܐ = Return the number of bindings of a map. @since 3.12 @@@@@@@M@@@@@@@@@87 {1:bindings Bindings} 6@@@@@@3@Je1@A(bindings 8@8H@б@г"!t8M8N@А!a@'E@ 8J8L@@@ @@@ '@@гX$list8]8a@В@гs#key8S8V@@ @@@!B@@@А!a-H8Y8[@@@@@6@@"Q@@@* @@@$V8R(@@@7@@%Z:+@@@8<.@f Return the list of all bindings of the given map. The returned list is sorted in increasing order of keys with respect to the ordering [Ord.compare], where [Ord] is the argument given to {!Map.Make}. @since 3.12 "bf#J`@@@@@@@;N@@>@v6@@@@@@y+min_binding!9bj:bu@б@г!tDbzEb{@А!a@/E@(3LKKLLLLL@>@ARbwSby@@@ @@@* @@В@г⠐#keydbeb@@ @@@+@@@А!a% pbqb@@@@@.@@,)@@@' @@-,*|b@@@bf@А Return the binding with the smallest key in a given map (with respect to the [Ord.compare] ordering), or raise [Not_found] if the map is empty. @since 3.12 2H@@@@@@@O@@@@@@@@@L/min_binding_opt"JRJa@б@г!tJfJg@А!a@9E@03@k>@AJcJe@@@ @@@2 @@г&optionJvJ|@В@гV#keyJlJo@@ @@@3$@@@А!a/*JrJt@@@@@8@@43@@@* @@@68Jk(@@@7@@7<:+@@@JN.@I Return the binding with the smallest key in the given map (with respect to the [Ord.compare] ordering), or [None] if the map is empty. @since 4.05  } 2@@@@@@@ P@@>@Y @@@@@@[+max_binding# 4< 4G@б@г|!t '4L (4M@А!a@AE@:3 / . . / / / / /@z>@A 54I 64K@@@ @@@< @@В@гŠ#key G4R H4U@@ @@@=@@@А!a%  S4X T4Z@@@@@.@@>)@@@' @@?,* _4[@@@ b48@ t Same as {!min_binding}, but returns the binding with the largest key in the given map. @since 3.12  o\` p@@@@@@@ Q@@@ @@@@@@L/max_binding_opt$  @б@г栐!t  @А!a@KE@B3        @k>@A  @@@ @@@D @@г &option   @В@г9#key  @@ @@@E$@@@А!a/*  @@@@@8@@F3@@@* @@@H8 (@@@7@@I<:+@@@ .@, x Same as {!min_binding_opt}, but returns the binding with the largest key in the given map. @since 4.05   y@@@@@@@ R@@>@< @@@@@@[&choose%  @б@г_!t  @А!a@SE@L3        @z>@A  @@@ @@@N @@В@г#key * +@@ @@@O@@@А!a%  6 7@@@@@.@@P)@@@' @@Q,* B@@@ E@ Return one binding of the given map, or raise [Not_found] if the map is empty. Which binding is chosen is unspecified, but equal bindings will be chosen for equal maps. @since 3.12  R Su@@@@@@@ kS@@@ f@@@@@@L*choose_opt& i j@б@гɠ!t t u@А!a@]E@T3 | { { | | | | |@k>@A  @@@ @@@V @@г 䠐&option  @В@г#key  @@ @@@W$@@@А!a/*  @@@@@8@@X3@@@* @@@Z8 (@@@7@@[<:+@@@ .@  Return one binding of the given map, or [None] if the map is empty. Which binding is chosen is unspecified, but equal bindings will be chosen for equal maps. @since 4.05   q@@@@@@@ T@@>@  ߐ@@@@@@[  쐠9 {1:searching Searching}   @@@@@@3        @m1@A$find'  @б@г~#key  @@ @@@^@@б@гd!t  @А!a@eE@_/  @@@ @@@a6@@А!a: & '@@@ @@b?@@@+@@cB.@@@ 0 @ q [find x m] returns the current value of [x] in [m], or raises [Not_found] if no binding for [x] exists.  = > G@@@@@@@ VU@@@  Q@@@@@@a(find_opt( TIQ UIY@б@гݠ#key _I[ `I^@@ @@@f3 a ` ` a a a a a@zu8@A@@б@гŠ!t pIe qIf@А!a@oE@g |Ib }Id@@@ @@@i@@г ޠ&option Im Is@А!a, Ij Il@@@ @@@k3 @@@@@l6@@@<@@m9?@@@ IM@ 񐠠 [find_opt x m] returns [Some v] if the current value of [x] in [m] is [v], or [None] if no binding for [x] exists. @since 4.05  tx  @@@@@@@ V@@&@  @@@@@@X*find_first)      !@б@б@г O#key   $   '@@ @@@p3        @s:@A@@г $bool   +   /@@ @@@q@@@@@r@@б@г G!t   7   8@А!a@{E@s'   4   6@@@ @@@u.@@В@г #key   <   ?@@ @@@v?@@@А!a#E   B   D@@@@@,@@wN@@@' @@xQ* @@@D@@yT +  #@@@ .  @   [find_first f m], where [f] is a monotonically increasing function, returns the binding of [m] with the lowest key [k] such that [f k], or raises [Not_found] if no such key exists. For example, [find_first (fun k -> Ord.compare k x >= 0) m] will return the first binding [k, v] of [m] where [Ord.compare k x >= 0] (intuitively: [k >= x]), or raise [Not_found] if [x] is greater than any element of [m]. @since 4.05  ; E I <""(@@@@@@@ TW@@"@  O@@@@@@t.find_first_opt* R"*"2 S"*"@@б@б@г ݠ#key _"*"C `"*"F@@ @@@|3 a ` ` a a a a a@:@A@@г #$bool n"*"J o"*"N@@ @@@}@@@@@~@@б@г ՠ!t "*"V "*"W@А!a@E@' "*"S "*"U@@@ @@@.@@г &option "*"f "*"l@В@г &#key "*"\ "*"_@@ @@@I@@@А!a-O "*"b "*"d@@@@@6@@X@@@* @@@] "*"[(@@@7@@a:+@@@T@@d "*"B/@@@ "*".2@  [find_first_opt f m], where [f] is a monotonically increasing function, returns an option containing the binding of [m] with the lowest key [k] such that [f k], or [None] if no such key exists. @since 4.05  "m"q #G#]@@@@@@@ X@@B@ - 퐠@@@@@@)find_last+ #_#g #_#p@б@б@г {#key #_#s #_#v@@ @@@3        @:@A@@г $bool #_#z #_#~@@ @@@@@@@@@@б@г s!t #_# #_#@А!a@E@' *#_# +#_#@@@ @@@.@@В@г #key <#_# =#_#@@ @@@?@@@А!a#E H#_# I#_#@@@@@,@@N@@@' @@Q* @@@D@@T W#_#r@@@ Z#_#c@ [find_last f m], where [f] is a monotonically decreasing function, returns the binding of [m] with the highest key [k] such that [f k], or raises [Not_found] if no such key exists. @since 4.05  g## h$a$w@@@@@@@ Y@@"@  {@@@@@@t-find_last_opt, ~$y$ $y$@б@б@г #key $y$ $y$@@ @@@3        @:@A@@г O$bool $y$ $y$@@ @@@@@@@@@@б@г !t $y$ $y$@А!a@E@' $y$ $y$@@@ @@@.@@г &option $y$ $y$@В@г R#key $y$ $y$@@ @@@I@@@А!a-O $y$ $y$@@@@@6@@X@@@* @@@] $y$(@@@7@@a:+@@@T@@d $y$/@@@ $y$}2@ I [find_last_opt f m], where [f] is a monotonically decreasing function, returns an option containing the binding of [m] with the highest key [k] such that [f k], or [None] if no such key exists. @since 4.05 $$%%@@@@@@@Z@@B@ Y@@@@@@'&; {1:traversing Traversing} #%%$%%@@@@@@3"!!"""""@1@A$iter-/%%0%%@б@б@г #key<%%=%%@@ @@@@@б@А!a@E@'M%%N%%@@г $unitV%%W%%@@ @@@6@@@@@9@@@#@@<& @@б@г !tk%&l%&@А!a*Lr%&s%&@@@0@@@S @@г$$unit%&%& @@ @@@`@@@@@c@@@,@@f%% @@@%%@  [iter f m] applies [f] to all bindings in map [m]. [f] receives the key as first argument, and the associated value as second argument. The bindings are passed to [f] in increasing order with respect to the ordering over the type of the keys. & &&'#@@@@@@@[@@@ @@@@@@$fold.'%'-'%'1@б@б@г >#key'3':'3'=@@ @@@3@:@A@@б@А!a@E@ '3'A'3'C@@б@А#acc@E@'3'G'3'K@@А#acc  '3'O'3'S@@@@@% @@@ @@(@@@.@@+1 @@б@г O!t'3'['3'\@А!a3;'3'X'3'Z@@@9@@@B @@б@А#acc3H'3'`'3'd@@А#acc9N'3'h'3'l@@@>>@@S @@@@@V@@@0@@Y'3'9 @@@"'%')@ s [fold f m init] computes [(f kN dN ... (f k1 d1 init)...)], where [k1 ... kN] are the keys of all bindings in [m] (in increasing order), and [d1 ... dN] are the associated data. /'m'q0'(9@@@@@@@H\@@@ C@@@@@@yQP? {1:transforming Transforming} M(;(?N(;(c@@@@@@3LKKLLLLL@1@A#map/Y(e(mZ(e(p@б@б@А!a@E@h(e(si(e(u@@А!b@E@#s(e(yt(e({@@@ @@(@@б@г ֠!t(e((e(@А!a%8(e((e(@@@+@@@? @@г 렐!t(e((e(@А!b/M(e((e(@@@5@@@T @@@@@W@@@4@@Z(e(r@@@(e(i@ 5 [map f m] returns a map with same domain as [m], where the associated value [a] of all bindings of [m] has been replaced by the result of the application of [f] to [a]. The bindings are passed to [f] in increasing order with respect to the ordering over the type of the keys. (())@@@@@@@]@@'@ΐ@@@@@@z$mapi0))))@б@б@г \#key))))@@ @@@3@:@A@@б@А!a@E@ ))))@@А!b@E@))))@@@ @@@@@#@@ &@@б@г b!t ))))@А!a(0))))@@@.@@@7 @@г w!t"))#))@А!b2E)))*))@@@8@@@L @@@@@O@@@4@@R6))@@@9))@ Same as {!map}, but the function receives as arguments both the key and the associated value for each binding of the map. F)*G*E*@@@@@@@_^@@'@Z@@@@@@r&filter1]**^**@б@б@г 蠐#keyj**k**@@ @@@3lkklllll@:@A@@б@А!a@E@ }**~**@@г;$bool****@@ @@@@@@@@@@@%@@"( @@б@г !t****@А!a*2****@@@0@@@9 @@г!t****@А!a?G****@@@E@@@N @@@@@Q@@@4@@T**@@@**@ 9 [filter f m] returns the map with all the bindings in [m] that satisfy predicate [p]. If every binding in [m] satisfies [f], [m] is returned unchanged (the result of the function is then physically equal to [m]) @since 3.12 @before 4.03 Physical equality was not ensured. **+,@@@@@@@_@@'@(萠@@@@@@t*filter_map2 ,,  ,,@б@б@гv#key ,, ,,@@ @@@3@:@A@@б@А!a@E@   ,,  ,,!@@гh&option ,,( ,,.@А!b@E@"  ,,%! ,,'@@@ @@@)@@@$@@,@@@2@@/5@@б@г!t6 ,,67 ,,7@А!a7?= ,,3> ,,5@@@=@@@F @@г!tK ,,>L ,,?@А!b7TR ,,;S ,,=@@@=@@@[ @@@@@^@@@4@@a_ ,,@@@b ,,@  [filter_map f m] applies the function [f] to every binding of [m], and builds a map from the results. For each binding [(k, v)] in the input map: - if [f k v] is [None] then [k] is not in the result, - if [f k v] is [Some v'] then the binding [(k, v')] is in the output map. For example, the following function on maps whose values are lists {[ filter_map (fun _k li -> match li with [] -> None | _::tl -> Some tl) m ]} drops all bindings of [m] whose value is an empty list, and pops the first element of each value that is non-empty. @since 4.11 o ,@,Dp..@@@@@@@`@@'@@@@@@@)partition3....@б@б@г#key....@@ @@@3@:@A@@б@А!a@E@ ././@@гd$bool./ ./ @@ @@@@@@@@@@@%@@"( @@б@г!t././@А!a*2././@@@0@@@9 @@В@г2!t././@А!aCK././@@@I@@@R @@@гI!t./$./%@А!aZb./!./#@@@`@@@i @@@@ @ @@p%@@@> @@sA@@@V@@v..@@@..@c [partition f m] returns a pair of maps [(m1, m2)], where [m1] contains all the bindings of [m] that satisfy the predicate [f], and [m2] is the map with all the bindings of [m] that do not satisfy [f]. @since 3.12 /&/* "00%@@@@@@@8a@@.@s3@@@@@@%split46$0'0/7$0'04@б@г#keyA$0'06B$0'09@@ @@@ 3CBBCCCCC@8@A@@б@г!tR$0'0@S$0'0A@А!a@E@ ^$0'0=_$0'0?@@@ @@@ @@В@гŠ!tp$0'0Hq$0'0I@А!a0w$0'0Ex$0'0G@@@$@@@7 @@@г۠&option$0'0O$0'0U@А!a5G$0'0L$0'0N@@@;@@@N @@@г!t$0'0[$0'0\@А!aL^$0'0X$0'0Z@@@R@@@e @@@@7@"@ @@n>@@@W @@qZ@@@w@@tz@@@$0'0+@  [split x m] returns a triple [(l, data, r)], where [l] is the map with all the bindings of [m] whose key is strictly less than [x]; [r] is the map with all the bindings of [m] whose key is strictly greater than [x]; [data] is [None] if [m] contains no binding for [x], or [Some v] if [m] binds [v] to [x]. @since 3.12 %0]0a,11@@@@@@@b@@/@ސ@@@@@@될 + {1:predicates Predicates and comparisons} .11.12@@@@@@3@1@A(is_empty5022%022-@б@гT!t02220223@А!a@E@  022/ 0221@@@ @@@'@@гΠ$bool0227022;@@ @@@4@@@@@7@@@$022! @u % Test whether a map is empty or not. 112<2@212<2j@@@@@@@Jc@@@E@@@@@@V#mem6H32l2tI32l2w@б@гѠ#keyS32l2yT32l2|@@ @@@3UTTUUUUU@oj8@A@@б@г!td32l2e32l2@А!a@'E@ p32l2q32l2@@@ @@@"@@г3$bool~32l232l2@@ @@@#+@@@@@$.@@@4@@%17 @@@32l2p@ݐ \ [mem x m] returns [true] if [m] contains a binding for [x], and [false] otherwise. 422522@@@@@@@d@@@@@@@@@P%equal7722723@б@б@А!a@5E@(3@g|6@A723723@@б@А!a 723 723 @@г$bool723723@@ @@@)@@@!@@*@@@$@@+ @@б@г#intk=4(4Fl=4(4I@@ @@@7@@@!@@8@@@$@@9 @@б@гՠ!t=4(4Q=4(4R@А!a4/=4(4N=4(4P@@@:@@@;6 @@б@г점!t=4(4Y=4(4Z@А!aKF=4(4V=4(4X@@@Q@@@=M @@г#int=4(4^=4(4a@@ @@@>Z@@@@@?]@@@.@@@`1 @@@F@@Ac=4(49@@@=4(4,@ Total ordering between maps. The first argument is a total ordering used to compare data associated with equal keys in the two maps. >4b4f?44@@@@@@@f@@"@ߐ@@@@@@'for_all9A45A45 @б@б@гm#keyA45A45@@ @@@D3@:@A@@б@А!a@OE@E A45A45@@г$bool A45 A45@@ @@@F@@@@@G@@@%@@H"( @@б@гu!t A45'!A45(@А!a*2'A45$(A45&@@@0@@@J9 @@гꠐ$bool5A45,6A450@@ @@@KF@@@@@LI@@@,@@MLAA45  @@@DA45@ l [for_all f m] checks if all the bindings of the map satisfy the predicate [f]. @since 3.12 QB5155RD55@@@@@@@jg@@@e@@@@@@l&exists:hF55iF55@б@б@г#keyuF55vF55@@ @@@P3wvvwwwww@:@A@@б@А!a@[E@Q F55F55@@гF$boolF55F55@@ @@@R@@@@@S@@@%@@T"( @@б@г!tF55F55@А!a*2F55F55@@@0@@@V9 @@гp$boolF55F55@@ @@@WF@@@@@XI@@@,@@YLF55 @@@F55@ q [exists f m] checks if at least one binding of the map satisfies the predicate [f]. @since 3.12 G55I6@6V@@@@@@@h@@@+될@@@@@@l; {1:converting Converting} K6X6\K6X6|@@@@@@3@~1@A'to_list;M6~6M6~6@б@гa!t M6~6 M6~6@А!a@eE@\ M6~6M6~6@@@ @@@^'@@г$list&M6~6'M6~6@В@г#key4M6~65M6~6@@ @@@_B@@@А!a-H@M6~6AM6~6@@@@@6@@`Q@@@* @@@bVNM6~6(@@@7@@cZ:+@@@TM6~6.@ 4 [to_list m] is {!bindings}[ m]. @since 5.1 aN66bO66@@@@@@@zi@@>@u@@@@@@y'of_list<xQ66yQ66@б@г$listQ67Q67@В@г#keyQ66Q66@@ @@@f3@F@A@@@А!a@oE@g Q67Q67@@@@@@@h@@@1 @@@jQ66/@@г!tQ67Q67@А!a"*Q67 Q67@@@(@@@l1 @@@@@m4@@@Q66@ [of_list bs] adds the bindings of [bs] to the empty map, in list order (if a key is bound twice in [bs] the last one takes over). @since 5.1 R77U77@@@@@@@j@@#@.@@@@@@S&to_seq|W77W77@б@гQ!tW77W77@А!a@ E@p3@r>@A W77 W77@@@ @@@r @@г#Seq!tW77W77@  W77!W77@@В@г#key/W770W77@@ @@@ -@@@А!a83;W77<W77@@@@@A@@ <@@@3 @@@ AIW77)@@@@@@ EC,@@@OW77/@ J Iterate on the whole map, in ascending order of keys @since 4.07 \X77]Y8)8?@@@@@@@uk@@?@p@@@@@@d*to_rev_seq}s[8A8It[8A8S@б@гӠ!t~[8A8Y[8A8Z@А!a@ E@ 3@>@A[8A8V[8A8X@@@ @@@  @@г#Seq!t[8A8i[8A8l@ [8A8m[8A8n@@В@г/#key[8A8_[8A8b@@ @@@ -@@@А!a83[8A8e[8A8g@@@@@A@@ <@@@3 @@@ A[8A8^)@@@@@@ EC,@@@[8A8E/@" K Iterate on the whole map, in descending order of keys @since 4.12 \8o8s]88@@@@@@@l@@?@2򐠠@@@@@@d+to_seq_from~_88_88@б@г~#key_88_88@@ @@@ 3@}8@A@@б@гf!t_88_88@А!a@ E@ _88_88@@@ @@@ @@г#Seq!t/_880_88@ 3_884_88@@В@г#keyB_88C_88@@ @@@ B@@@А!a6HN_88O_88@@@@@?@@ Q@@@3 @@@ V\_88)@@@@@@ ZC,@@@`@@ ]c/@@@e_882@ [to_seq_from k m] iterates on a subset of the bindings of [m], in ascending order of keys, from key [k] or above. @since 4.07 r`88sb9}9@@@@@@@m@@B@@@@@@@|'add_seqd99d99@б@г#Seq!td99d99@ d99d99@@В@г)#keyd99d99@@ @@@ 3@O@A@@@А!a@ E@  d99d99@@@@@@@ @@@: @@@ d990@@б@г+!td99d99@А!a$,d99d99@@@*@@@ 3 @@г@!td99d99@А!a9Ad99d99@@@?@@@ H @@@@@ K@@@7@@ N3@@@d99@R B Add the given bindings to the map, in order. @since 4.07 e99f9:@@@@@@@'n@@&@b"@@@@@@m&of_seq%h::&h::#@б@г#Seq!t4h::15h::4@ 8h::59h::6@@В@гŠ#keyGh::'Hh::*@@ @@@ 3IHHIIIII@O@A@@@А!a@ E@  Zh::-[h::/@@@@@@@ @@@: @@@ hh::&0@@гŠ!tph::=qh::>@А!a"*wh:::xh::<@@@(@@@ 1 @@@@@ 4@@@h::@Ԑ 9 Build a map from the given bindings @since 4.07 i:?:Cj:k:@@@@@@@o@@#@@@@@@@S@#A@A@@z!@@j@@h@9@@`,@@<@@]@=@~@^@@w)@  @ } @  u@ U @  D@ $ @  *@  @  @{@[@$@@Y@9@+@ @#@@{$@@$@@r@x@@3@z@A]3@@AB  k::@@P * Output signature of the functor {!Make}.  l::l::@@@@@@@A  @3  @@A@$MakeFn::n::@6s@@Т#OrdG)n::*n::@Р+OrderedType2n::3n::@321122222@A@jA@W5@@%@@b#@@@@@?@@`@@@@a@@o2@@8@ @ | @  t@ A @  N@  @  ;@  @  @h@H@Z@:@]@=@B@"@6@@?@@-@ @s@@䐠@@@@@@N@Aml@@УРZ!Sn::n::@3@x@@q@@A  @@7#keyn::n::@+?@;@@@A!t@@@ @@@@n::n::@@@@r@@@Aг #Ordn::n::@n::@@@/@@@@`H;@@@A! @@@ @@@@@@@A@AH;9@A@A@@@-+@@A@ @@@ @@@ @@@ @@@@@ @@@ @@ @@ @@ @t@e@@@@ @R@(CZ@@@ @@@ 0'b@@@ @@@ @@ @@ @@ @@@3@@@ @@٠@@@ à@@@ @@ @O@@@ S@@@ @@ @@ @@ @r@c@R@@@ @PbS@@@ @@ @@ @0. @@a@@@ @q@@@ u@@@ @@ @@ @@@@v@@@ @@@@ @@@@ xn@@@ @@ @@ @@ @@@@ @@@@ ~@@@ @@ @@ @@ @ @@@@@@ @@۠@@@ @@ @@ @@ @@@@ @@@@ à@@@ @@ @@ @@ @s@d@͠V@@@ H@@@ @@ @:8*@@ڠ@@@ @@@@ @@@ @@@ @@ @@@@@@ @@@@ @@@ @@ @pn`@Q@C@@@ 5@@@@ @P@@ @@@ @@ @ @@@@@ @@@@ @@@ @@ @@@.@@@ |@.@@@ @@@ @@@ @@ @USE@6@E(@@@ @B@@@ @2@@ @@ @@@X@@@ à@X@@@ @@@ @@@ @@ @@j@d@@@ @tR@@@ S@@ @@ @97)@@s@@@ @@@@ @@@ @@ @@ @@@@@@@ @@@ @@ @@@@ @@@@ @@@ @@ @@ @ki[@L@@@@@ <@@@ @@ @%@@@ @@@@ @2@@ @@@ @@ @@ @@@@@@@ @@@ @@ @٠@@@ @@@@ @@@ @@ @@ @}{m@^@@@@@ ~N@@@ }@@ |@7@@@ {+@@@@ z@D@@ y@@@ x@@ w@@ v@@@@@@@ u@@@@ t@@ s@@ r@@@@ q@@@ p@@ o@@ n@r@c@@@@@ m@P@EE@@ l@@ k@@ j@1W@@@ i@MM@@ h@@ g@@ f@ @ @@  @@ e@A @@@ dE @@@ c@@ b@@ a@   }@ n@@F@@@ `@ [ P@@ _@@ ^@X `@@@ ]\ Y@@@ \@@ [@@ Z@   @ @@]@@@ Y@  @@@ X@@ W@@ V@r @@@ Uv @@@ T@@ S@@ R@   @ @@w@@@ Q@ r j `@@@ P@@ O@@ N@ {@@@ M j@@@ L@@ K@@ J@ $ " @ @@@@@ I@  @@@ H@@ G@@ F@ @@@ E@ @@@ C@ @@@ D@@ B@@ A@@ @@   @ y@@@@ ?@Ġ _@@@ >@̠ g@@@ ;@ B m@@@ <@ؠ s@@@ =@@ :@@ 9@@ 8@   @ @ @@@ 7 @@@ 6@@ 5@   @ @@@@ 4@ }@@@ 3 q@@@ 2@@ 1@@ 0@ ` ^ P@ A@@ :@ < *@@@ /@@ .@@ -@  D@@@ ,@ J@@@ + @@@ *@@ )@@ (@@ '@   @ @@ @  @@@ &@@ %@@ $@& @@@ #@, @@@ " {@@@ !@@ @@ @@ @ f d V@ G@@0@@@ @ 4 ,@@@ @@ @@ @E <@@@  @@@ @@ @@ @@@@I@@@ @@@@ @@ @@ @^@@@ @@@ @@ @@ @|@Z@kL@@@ @@k@@@ @Y@@ @@@ @@ @ @@@~@@@ @@@ @@@ @@@ @@ @@@@@@ |{@@@@ @@@ @@@ @@ @NL>@/@!@@@ @@@@ @0@@ @@@ @@ @@@@@@ @Р@@@ 9@@@@ @@@ @@@ @@ @@ @om_@P@NLK@@@@ @/@@ @@@ @5@@@ 9@@@ @@ @@ @@@mΠ@@@@ 렠@@@ @@@ @@@ @@ @y@@`dC@@33        @@An::H@@a! Z Functor building an implementation of the map structure given a totally ordered type. o::p;/;R@@@@@@@!n::Y@Z@@@0@@"~@@@@@@@@@354455555@"@cbA@[ZA@WV@PO@<;@! @@@@@@@|{@kj@VU@ED@0/@@  @@@@@@xw@a`@LK@<;@'&@@@@@@@~}@dc@ML@65@! @  @@@@@@kyz@A@ H************************************************************************A@@A@L@ H BMMBM@ H OCaml CC@ H DD3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt E44E4@ H FF@ H Copyright 1996 Institut National de Recherche en Informatique et GG@ H en Automatique. HHg@ H IhhIh@ H All rights reserved. This file is distributed under the terms of JJ@ H the GNU Lesser General Public License version 2.1, with the KKN@ H special exception on linking described in the file LICENSE. LOOLO@ H MM@ H************************************************************************NN5@ NOTE: If this file is map.mli, do not edit it directly! Instead, edit templates/map.template.mli and run tools/sync_stdlib_docs P77Q{@ * Association tables over ordered types. This module implements applicative association tables, also known as finite maps or dictionaries, given a total ordering function over the keys. All operations over maps are purely applicative (no side-effects). The implementation uses balanced binary trees, and therefore searching and insertion take time logarithmic in the size of the map. For instance: {[ module IntPairs = struct type t = int * int let compare (x0,y0) (x1,y1) = match Stdlib.compare x0 x1 with 0 -> Stdlib.compare y0 y1 | c -> c end module PairsMap = Map.Make(IntPairs) let m = PairsMap.(empty |> add (0,1) "hello" |> add (1,0) "world") ]} This creates a new module [PairsMap], with a new type ['a PairsMap.t] of maps from [int * int] to ['a]. In this example, [m] contains [string] values so its type is [string PairsMap.t]. <* The type of the map keys. < * A total ordering function over the keys. This is a two-argument function [f] such that [f e1 e2] is zero if the keys [e1] and [e2] are equal, [f e1 e2] is strictly negative if [e1] is smaller than [e2], and [f e1 e2] is strictly positive if [e1] is greater than [e2]. Example: a suitable ordering function is the generic structural comparison function {!Stdlib.compare}. 㠠 ** Input signature of the functor {!Make}. 0* {1:maps Maps} <* The type of the map keys. s 1* The type of maps from type [key] to type ['a]. <1* The empty map.  * [add key data m] returns a map containing the same bindings as [m], plus a binding of [key] to [data]. If [key] was already bound in [m] to a value that is physically equal to [data], [m] is returned unchanged (the result of the function is then physically equal to [m]). Otherwise, the previous binding of [key] in [m] disappears. @before 4.03 Physical equality was not ensured. z * [add_to_list key data m] is [m] with [key] mapped to [l] such that [l] is [data :: Map.find key m] if [key] was bound in [m] and [[data]] otherwise. @since 5.1 䠠 a* [update key f m] returns a map containing the same bindings as [m], except for the binding of [key]. Depending on the value of [y] where [y] is [f (find_opt key m)], the binding of [key] is added, removed or updated. If [y] is [None], the binding is removed if it exists; otherwise, if [y] is [Some z] then [key] is associated to [z] in the resulting map. If [key] was already bound in [m] to a value that is physically equal to [z], [m] is returned unchanged (the result of the function is then physically equal to [m]). @since 4.06 B o* [singleton x y] returns the one-element map that contains a binding [y] for [x]. @since 3.12 䠠 6* [remove x m] returns a map containing the same bindings as [m], except for [x] which is unbound in the returned map. If [x] was not in [m], [m] is returned unchanged (the result of the function is then physically equal to [m]). @before 4.03 Physical equality was not ensured. w * [merge f m1 m2] computes a map whose keys are a subset of the keys of [m1] and of [m2]. The presence of each such binding, and the corresponding value, is determined with the function [f]. In terms of the [find_opt] operation, we have [find_opt x (merge f m1 m2) = f x (find_opt x m1) (find_opt x m2)] for any key [x], provided that [f x None None = None]. @since 3.12  * [union f m1 m2] computes a map whose keys are a subset of the keys of [m1] and of [m2]. When the same binding is defined in both arguments, the function [f] is used to combine them. This is a special case of [merge]: [union f m1 m2] is equivalent to [merge f' m1 m2], where - [f' _key None None = None] - [f' _key (Some v) None = Some v] - [f' _key None (Some v) = Some v] - [f' key (Some v1) (Some v2) = f key v1 v2] @since 4.03 ߠ >* Return the number of bindings of a map. @since 3.12 8* {1:bindings Bindings} q * Return the list of all bindings of the given map. The returned list is sorted in increasing order of keys with respect to the ordering [Ord.compare], where [Ord] is the argument given to {!Map.Make}. @since 3.12  * Return the binding with the smallest key in a given map (with respect to the [Ord.compare] ordering), or raise [Not_found] if the map is empty. @since 3.12  * Return the binding with the smallest key in the given map (with respect to the [Ord.compare] ordering), or [None] if the map is empty. @since 4.05 + u* Same as {!min_binding}, but returns the binding with the largest key in the given map. @since 3.12 Ġ y* Same as {!min_binding_opt}, but returns the binding with the largest key in the given map. @since 4.05 N * Return one binding of the given map, or raise [Not_found] if the map is empty. Which binding is chosen is unspecified, but equal bindings will be chosen for equal maps. @since 3.12 砠 * Return one binding of the given map, or [None] if the map is empty. Which binding is chosen is unspecified, but equal bindings will be chosen for equal maps. @since 4.05 q:* {1:searching Searching} V r* [find x m] returns the current value of [x] in [m], or raises [Not_found] if no binding for [x] exists.  * [find_opt x m] returns [Some v] if the current value of [x] in [m] is [v], or [None] if no binding for [x] exists. @since 4.05  * [find_first f m], where [f] is a monotonically increasing function, returns the binding of [m] with the lowest key [k] such that [f k], or raises [Not_found] if no such key exists. For example, [find_first (fun k -> Ord.compare k x >= 0) m] will return the first binding [k, v] of [m] where [Ord.compare k x >= 0] (intuitively: [k >= x]), or raise [Not_found] if [x] is greater than any element of [m]. @since 4.05  * [find_first_opt f m], where [f] is a monotonically increasing function, returns an option containing the binding of [m] with the lowest key [k] such that [f k], or [None] if no such key exists. @since 4.05 r * [find_last f m], where [f] is a monotonically decreasing function, returns the binding of [m] with the highest key [k] such that [f k], or raises [Not_found] if no such key exists. @since 4.05 砠 * [find_last_opt f m], where [f] is a monotonically decreasing function, returns an option containing the binding of [m] with the highest key [k] such that [f k], or [None] if no such key exists. @since 4.05 L<* {1:traversing Traversing} 1 * [iter f m] applies [f] to all bindings in map [m]. [f] receives the key as first argument, and the associated value as second argument. The bindings are passed to [f] in increasing order with respect to the ordering over the type of the keys.  * [fold f m init] computes [(f kN dN ... (f k1 d1 init)...)], where [k1 ... kN] are the keys of all bindings in [m] (in increasing order), and [d1 ... dN] are the associated data. + * {1:transforming Transforming}  6* [map f m] returns a map with same domain as [m], where the associated value [a] of all bindings of [m] has been replaced by the result of the application of [f] to [a]. The bindings are passed to [f] in increasing order with respect to the ordering over the type of the keys.  * Same as {!map}, but the function receives as arguments both the key and the associated value for each binding of the map.  :* [filter f m] returns the map with all the bindings in [m] that satisfy predicate [p]. If every binding in [m] satisfies [f], [m] is returned unchanged (the result of the function is then physically equal to [m]) @since 3.12 @before 4.03 Physical equality was not ensured.  * [filter_map f m] applies the function [f] to every binding of [m], and builds a map from the results. For each binding [(k, v)] in the input map: - if [f k v] is [None] then [k] is not in the result, - if [f k v] is [Some v'] then the binding [(k, v')] is in the output map. For example, the following function on maps whose values are lists {[ filter_map (fun _k li -> match li with [] -> None | _::tl -> Some tl) m ]} drops all bindings of [m] whose value is an empty list, and pops the first element of each value that is non-empty. @since 4.11  * [partition f m] returns a pair of maps [(m1, m2)], where [m1] contains all the bindings of [m] that satisfy the predicate [f], and [m2] is the map with all the bindings of [m] that do not satisfy [f]. @since 3.12 M * [split x m] returns a triple [(l, data, r)], where [l] is the map with all the bindings of [m] whose key is strictly less than [x]; [r] is the map with all the bindings of [m] whose key is strictly greater than [x]; [data] is [None] if [m] contains no binding for [x], or [Some v] if [m] binds [v] to [x]. @since 3.12  ,* {1:predicates Predicates and comparisons}  &* Test whether a map is empty or not.  D ]* [mem x m] returns [true] if [m] contains a binding for [x], and [false] otherwise.  ߠ * [equal cmp m1 m2] tests whether the maps [m1] and [m2] are equal, that is, contain equal keys and associate them with equal data. [cmp] is the equality predicate used to compare the data associated with the keys.  I * Total ordering between maps. The first argument is a total ordering used to compare data associated with equal keys in the two maps.  m* [for_all f m] checks if all the bindings of the map satisfy the predicate [f]. @since 3.12  0 r* [exists f m] checks if at least one binding of the map satisfies the predicate [f]. @since 3.12  <* {1:converting Converting}  5* [to_list m] is {!bindings}[ m]. @since 5.1  ) * [of_list bs] adds the bindings of [bs] to the empty map, in list order (if a key is bound twice in [bs] the last one takes over). @since 5.1  K* Iterate on the whole map, in ascending order of keys @since 4.07  4 L* Iterate on the whole map, in descending order of keys @since 4.12  * [to_seq_from k m] iterates on a subset of the bindings of [m], in ascending order of keys, from key [k] or above. @since 4.07 $ C* Add the given bindings to the map, in order. @since 4.07  :* Build a map from the given bindings @since 4.07  +* Output signature of the functor {!Make}.  [* Functor building an implementation of the map structure given a totally ordered type. @?)../ocamlc0-strict-sequence(-absname"-w5+a-4-9-41-42-44-45-48"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal"-o/stdlib__Map.cmi"-c  [/home/teraram/ci/builds/workspace/parallel-build/flambda/false/label/ocaml-manycores/stdlib @@0t+il3        @ @@8CamlinternalFormatBasics0%FU(Q/Tu&Stdlib0Lku]8_٠.Stdlib__Either0Vy`u~c à ߐ0L5xE|O0~,J-+Stdlib__Seq0nwzG&amg@0L5xE|O0~,J-As@ А_@ɐV@7AI@  X,@@@  z  F@  @o@@@`y@*@ږ  ِA@Pi@ ' 7@ n @ o@ҐQk@@M\41@ D r@@@@ ɐ <:@  @d@@ߐ:@y\@@P@@