Caml1999I0377w ))v+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@,@@@+@R@@@-@@@.@@/@@0@    D@@W@@.find_first_opt@@d@@@1)@@@2@@3@!a@5@@@4%@}@@@6@@@7@@@8@@9@@:@"*"."*"l@@X@@)find_last@@@@@;U@@@<@@=@!a@?@@@>@@@@@@@@A@@B@@C@#_#c #_#@@Y@@-find_last_opt@@@@@D|@@@E@@F@Ԡ!a@H@@@Gx@@@@I@@@J@@@K@@L@@M@4$y$}5$y$@@FZ@@$iter@@@@@N@!a@R$unitF@@@O@@P@@Q@@@@S @@@T@@U@@V@Z%%[%& @@l[@@$fold@@ @@@W@!a@[@#acc@]@@X@@Y@@Z@.@@@\@  @@^@@_@@`@~'%')'3'l@@\@@#map@@!a@b!b@d@@a@K @@@cO @@@e@@f@@g@(e(i(e(@@]@@$mapi@@L@@@h@!a@k!b@m@@i@@j@o @@@ls @@@n@@o@@p@))))@@^@@&filter@@p@@@q@!a@v;@@@r@@s@@t@ @@@u@@@w@@x@@y@****@@_@@*filter_map@@@@@z@!a@~M!b@@@@{@@|@@}@@@@@@@@@@@@ ,, ,,?@@ `@@)partition@@@@@@!a@@@@@@@@@ @@@@@@@@@@@@@@@@@@<..=./%@@Na@@%split@@@@@!a@@@@@ @@@@@@@@@@@@@@@@@@i$0'0+j$0'0\@@{b@@(is_empty@*!a@@@@@@@@@@022!022;@@c@@,is_singleton@A!a@@@@@@@@@@32l2p32l2@@d@@#mem@D@@@@]!a@@@@@@@@@@@@822823@@e@@%equal@@!a@@*@@@@@@@@@@@@@@@:@@@@@@@@@@<3j3n<3j3@@f@@'compare@@!a@@@@@@@@@@@@@@@@@@@@@@@@@@@B44B44@@g@@'for_all@@@@@@!a@{@@@@@@@@Ӡ @@@@@@@@@@@%F5r5v&F5r5@@7h@@&exists@@@@@@!a@@@@@@@@@ @@@@@@@@@@@IK66"JK66Q@@[i@@'to_list@ !a@@@@Ѡ@@@@Π@@@@@@@@@jR66kR67@@|j@@'of_list@@@@@Ҡ@!a@@@@@@=@@@@@@V7]7aV7]7@@k@@&to_seq@L!a@@@@&Stdlib#Seq!t@N@@@ڠ@@@@@@@@@\888<\888a@@l@@*to_rev_seq@s!a@@@@'#Seq!t@r@@@ࠠ@@@@@@@@@`88`88@@m@@+to_seq_from@@@@@!a@@@@P#Seq!t@@@@砠@@@@@@@@@@@d9;9?d9;9p@@n@@'add_seq@l#Seq!t@@@@젠@!a@@@@@@@נ @@@۠@@@@@@@@)i: :*i: :=@@;o@@&of_seq@#Seq!t@@@@@!a@@@@@@@@@@@@Mm::Nm::@@_p@@@@QA  Rp::@cq@@Ӡ$Make@#Ordl8;@@@A!t@@@a@@@@ns;/;Xos;/;h@@@@s@A@>;=@b@A@A@:9@@8@@@5A@4 3@c@@@d@0@-@,@(@@@e@+@g@@@@f @@@h@@i@@j@@k@(@%@$@@@@l@#@o@+  @@@m@@@n3@@@p@@@q@@r@@s@@t@@@@5@@@u@@@z@@@v@@@w@@x@S @@@yW@@@{@@|@@}@@~@@ @ @U@@@@ @g@@@@@@@@@@@e@@@@v@@@@{@@@@@@@@@@@@{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@à @@@@ɠ@@@͠@@@@@@@@@@@@@נ@@@@@@@@@@@@@@@@@ՠ@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@Ġ@@@@@@@@@@@@@@@@)@@@@@&@@@@ @@@@@@@@=@@@@@=@@@ @@@@@@@@@@@@U@@@@@R@@@Ƞ@ @@@@@@@@i@@@@@i@@@͠@@@@@@@@@@@@u@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ᠠ@ @@@@@@@@@@@@@@@@@@@@͠@@@@|@@@@ꠠ@@@@@@@@@@@{@x@w@@@@@v@@@@@@u@@@@@@@@@ @@@@@@@r@o@n@@@@@m@@@@@@ l@@@@i@ @@@@@@@@@@@@@@h@e@d@@@@@@c@`@@@@@@@@2 @@@]@@@@@ @@ @\@Y@X@@5@@@ @W@@T@@@ @@ @@@L @@@@  @@@@@@@Q@N@M@@L@I@@@@^@@@b @@@@@@@@F@C@B@@b@@@@A@>@!@@@@@w@@@ { @@@"@@#@@$@;@8@7@@{@@@%@6@*3@@@&@@'@@(@ @@@) @@@+@@,@@-@2@/@.@@@@@.@-@2*)@4@@@/@@0@@1@ @@@3 @@@5@@6@@7@&@#@"@@@@@8@!@>@@@9@@:@@;@ʠ @@@<@Ҡ@@@?@ؠ@@@=@@@@@A@@B@@@@@@@C@@G@@@D@ @@@H@@@@F@@@@E@@I@@J@@K@@@@@L@@@M @@@N@@O@ @@@@P@@@Q@@@R@@S@@@@@@@T@'@U@@@V@@@W@@X@@Y@@@@@@^@@@@Z@@[@@\@? @@@]@E@@@_@@@`@@a@@b@@c@@@@@@h@@@@d@@e@@f@\ @@@g@b@@@i@@@j@@k@@l@@m@@@@@e@@@n@@r@@@o@@p@@q@| @@@s@@@t@@u@@v@@@@@@@@w@@{@@@x@@y@@z@ @@@|@@@}@@~@@@@@@@@@@ɠ@@@@@@@@@@@@@@@@à@@@@@@@@@@@ɠ@@@@@@@@@Ӡ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@8@@@< @@@@@@@@@@@%@C@@@@@@@@@@V@@@@@@@@@@ s;/;/i@ t@@@@^L+Stdlib__Map0hؤ5O8% By+Stdlib__Seq0nwzG&amg.Stdlib__Either0Vy`u~c à&Stdlib0-i8Q"L{v;8CamlinternalFormatBasics0%FU(Q/Tu@@@Caml1999T037!C+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  @gq@Б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,is_singleton6H32l2tI32l2@б@г!tS32l2T32l2@А!a@%E@3[ZZ[[[[[@up>@Aa32l2b32l2@@@ @@@! @@г$$boolo32l2p32l2@@ @@@"@@@@@#@@@z32l2p @ː H Test whether a map has exactly one element or not. @since 5.5 422622@@@@@@@d@@@@@@@@@8#mem7822822@б@г'#key822822@@ @@@&3@Ql8@A@@б@г!t822822@А!a@.E@'822822@@@ @@@)@@г$bool822823@@ @@@*+@@@@@+.@@@4@@,17 @@@822@3 \ [mem x m] returns [true] if [m] contains a binding for [x], and [false] otherwise. 933:3G3h@@@@@@@e@@@C@@@@@@P%equal8<3j3r<3j3w@б@б@А!a@<3j3@А!a4/D<3j3E<3j3@@@:@@@46 @@б@г!tT<3j3U<3j3@А!aKF[<3j3\<3j3@@@Q@@@6M @@г$booli<3j3j<3j3@@ @@@7Z@@@@@8]@@@.@@9`1 @@@F@@:cx<3j3y@@@{<3j3n@̐ [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. =33@4o4@@@@@@@f@@"@@@@@@@'compare9B44B44@б@б@А!a@JE@=3@6@AB44B44@@б@А!a B44B44@@г#intB44B44@@ @@@>@@@!@@?@@@$@@@ @@б@г+!tB44B44@А!a4/B44B44@@@:@@@B6 @@б@гB!tB44B44@А!aKFB44B44@@@Q@@@DM @@гՠ#intB44B44@@ @@@EZ@@@@@F]@@@.@@G`1 @@@F@@HcB44@@@B44@e Total ordering between maps. The first argument is a total ordering used to compare data associated with equal keys in the two maps. !C44"D5%5p@@@@@@@:g@@"@u5@@@@@@'for_all:8F5r5z9F5r5@б@б@гà#keyEF5r5FF5r5@@ @@@K3GFFGGGGG@:@A@@б@А!a@VE@L XF5r5YF5r5@@г$boolaF5r5bF5r5@@ @@@M@@@@@N@@@%@@O"( @@б@гˠ!tvF5r5wF5r5@А!a*2}F5r5~F5r5@@@0@@@Q9 @@г@$boolF5r5F5r5@@ @@@RF@@@@@SI@@@,@@TLF5r5 @@@F5r5v@될 l [for_all f m] checks if all the bindings of the map satisfy the predicate [f]. @since 3.12 G55I66@@@@@@@h@@@@@@@@@l&exists;K66&K66,@б@б@гI#keyK66/K662@@ @@@W3@:@A@@б@А!a@bE@X K666K668@@г$boolK66<K66@@@ @@@Y@@@@@Z@@@%@@["( @@б@гQ!tK66HK66I@А!a*2K66EK66G@@@0@@@]9 @@гƠ$boolK66MK66Q@@ @@@^F@@@@@_I@@@,@@`LK66. @@@ K66"@q q [exists f m] checks if at least one binding of the map satisfies the predicate [f]. @since 3.12 -L6R6V.N66@@@@@@@Fi@@@A@@@@@@lON; {1:converting Converting} KP66LP66@@@@@@3JIIJJJJJ@~1@A'to_list<WR66XR67@б@г!tbR67 cR67 @А!a@lE@c nR67oR67@@@ @@@e'@@г$list|R67}R67@В@г#keyR67R67@@ @@@fB@@@А!a-HR67R67@@@@@6@@gQ@@@* @@@iVR67(@@@7@@jZ:+@@@R66.@ 4 [to_list m] is {!bindings}[ m]. @since 5.1 S77"T7F7[@@@@@@@j@@>@ ː@@@@@@y'of_list=V7]7eV7]7l@б@гJ$listV7]7zV7]7~@В@гe#keyV7]7pV7]7s@@ @@@m3@F@A@@@А!a@vE@n V7]7vV7]7x@@@@@@@o@@@1 @@@qV7]7o/@@гe!tV7]7V7]7@А!a"*V7]7V7]7@@@(@@@s1 @@@@@t4@@@#V7]7a@t [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 0W771Z8!86@@@@@@@Ik@@#@D@@@@@@S&to_seq}G\888@H\888F@б@г!tR\888LS\888M@А!a@ E@w3ZYYZZZZZ@r>@A`\888Ia\888K@@@ @@@y @@г#Seq!tr\888\s\888_@ v\888`w\888a@@В@г#key\888R\888U@@ @@@ -@@@А!a83\888X\888Z@@@@@A@@ <@@@3 @@@ A\888Q)@@@@@@ EC,@@@\888</@ J Iterate on the whole map, in ascending order of keys @since 4.07 ]8b8f^88@@@@@@@l@@?@Ɛ@@@@@@d*to_rev_seq~`88`88@б@г)!t`88`88@А!a@ E@ 3@>@A`88`88@@@ @@@  @@г^#Seq!t`88`88@ `88`88@@В@г#key`88`88@@ @@@ -@@@А!a83`88`88@@@@@A@@ <@@@3 @@@ A!`88)@@@@@@ EC,@@@'`88/@x K Iterate on the whole map, in descending order of keys @since 4.12 4a885b9#99@@@@@@@Mm@@?@H@@@@@@d+to_seq_fromKd9;9CLd9;9N@б@гԠ#keyVd9;9QWd9;9T@@ @@@ 3XWWXXXXX@}8@A@@б@г!tgd9;9[hd9;9\@А!a@ E@ sd9;9Xtd9;9Z@@@ @@@ @@г#Seq!td9;9kd9;9n@ d9;9od9;9p@@В@г#keyd9;9ad9;9d@@ @@@ B@@@А!a6Hd9;9gd9;9i@@@@@?@@ Q@@@3 @@@ Vd9;9`)@@@@@@ ZC,@@@`@@ ]c/@@@d9;9?2@ [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 e9q9ug9: @@@@@@@n@@B@ܐ@@@@@@|'add_seqi: :i: :@б@гX#Seq!ti: :(i: :+@ i: :,i: :-@@В@г#keyi: :i: :!@@ @@@ 3@O@A@@@А!a@ E@  i: :$i: :&@@@@@@@ @@@: @@@ "i: :0@@б@г!t,i: :4-i: :5@А!a$,3i: :14i: :3@@@*@@@ 3 @@г!tAi: :<Bi: :=@А!a9AHi: :9Ii: :;@@@?@@@ H @@@@@ K@@@7@@ N3@@@Wi: :@ B Add the given bindings to the map, in order. @since 4.07 dj:>:Bek:s:@@@@@@@}o@@&@x@@@@@@m&of_seq{m::|m::@б@г#Seq!tm::m::@ m::m::@@В@г#keym::m::@@ @@@ 3@O@A@@@А!a@ E@  m::m::@@@@@@@ @@@: @@@ m::0@@г!tm::m::@А!a"*m::m::@@@(@@@ 1 @@@@@ 4@@@m::@* 9 Build a map from the given bindings @since 4.07 n::o::@@@@@@@p@@#@:@@@@@@S@ysA@R%A@@w@W@=@@p@P@o@@O@@r@@<@@]@*@@_ @  W@ 7 @  /@  @ z @  @ ` @  j@ J@#@z@G@@[@;@-@ @%@@}&@@&@@t@z@@3NMMNNNNN@|@A_3QPPQQQQQ@@AVB  Wp::@@h * Output signature of the functor {!Make}. eq::fq:;-@@@@@@@hA  @3feefffff@@A@$MakeFus;/;6vs;/;:@t@@Т#OrdGs;/;<s;/;?@Р+OrderedTypes;/;Bs;/;M@3@(EA@A@@m@}@]@{@[ @,@ s@S@@w/@@P@0@q@Q@@j@@p @  h@ H @  7@  @ s @  @ s @  n@ N@@@^@>@a@A@F@&@:@@C@#@1@@w@@>@@@@@@@Aon@@УР!Ss;/;Qs;/;R@3@z@@!r@@A  @@#keys;/;]s;/;`@+@;@@@A!t@@@ @@@@"s;/;X#s;/;h@@@@;s@@@Aг #Ord.s;/;c/s;/;f@2s;/;g@@@/@@@@H;@@@A! @@@ @@@@@@@A@H;@A@A@po@@@@wA@_ R@@@ @CA3@$@ @@@ @@@@@ @@@ @@ @@ @@ @@@@@@ @@(@@@ @@@ 0@@@ @@@ @@ @@ @@ @b`R@C@3@@@ @@3)@@@ -@@@ @@ @O3@@@ S7@@@ @@ @@ @@ @@@R@@@ @b@@@ @@ @@ @z@k@a@@@ @qQ@@@ uU@@@ @@ @@ @-+@@@v@@@ @@@@ @@@@ Ҡ@@@ @@ @@ @@ @@@@ @@@@ @@@ @@ @@ @@ @use@V@@@@@ @C@E5H@@@ @@ @@ @@ @N@@@ @T@@@ àX@@@ @@ @@ @@ @@@͠@@@ @@@ @@ @@b@ڠT@@@ H@@@@ ̠@a@@ @@@ @@ @!@@@@@ @@@@ Ǡ@@@ @@ @@@@@@ @@@@ à@@@ @@@ @@ @hfX@I@;@@@ @@@@ @E@@ @@ @@@.@@@ ֠@.@@@ @@@ @@@ @@ @@@E@@@ @B@@@ @@@ @@ @XVH@9@X+@@@ @X@@@ @8@@ @@@ @@ @@@d@@@ @t@@@ @@ @@ @@t@s@@@ @Z@@@ N^@@@ @@ @@ @64&@@@@@@ @@@ @@ @@@@ @@@@ @@@ @@ @@ @@@@@@@ @@@ @@ @@@@ s@@@@ @@@ @@@ @@ @@ @HF8@)@@@@@ @@@ @@ @٠@@@ @@@@ @ @@ @@ @@ @@@@@@@ @@@ @@ @@@@ @@@@ @@@ @@@ @@ @@ @ZXJ@(@@@@@ @@@@ @@ @@ @@@@ ~@@@ }@@ |@@ {@@@@@@@ z@@@@ y@@ x@@ w@1@@@ v@@@ u@@ t@@ s@`^P@.@@'@@ r@A,@@@ qE%@@@ p@@ o@@ n@   @ @@F@@@ m@  @@ l@@ k@X @@@ j\ @@@ i@@ h@@ g@ r p b@ S@@]@@@ f@ @ 8@@@ e@@ d@@ c@r H@@@ bv L@@@ a@@ `@@ _@   @ @@w@@@ ^@  Ġ @@@ ]@@ \@@ [@ @@@ Z @@@ Y@@ X@@ W@ ~ | n@ _@@@@@ V@ L D@@@ U@@ T@@ S@ T@@@ R@ \@@@ P@ b@@@ Q@@ O@@ N@@ M@   @ @@@@ L@Ġ @@@ K@̠ @@@ H@  @@@ I@ؠ @@@ J@@ G@@ F@@ E@ j h Z@ 8@ *@@@ D @@@ C@@ B@   @ @ @@@ A @@@ @@@ ?@   @ @@@@ >@ @@@ = @@@ <@@ ;@@ :@ q o a@ R@@ K@ M ;@@@ 9@@ 8@@ 7@ U@@@ 6@ [@@@ 5 @@@ 4@@ 3@@ 2@@ 1@   @ @@ @  @@@ 0@@ /@@ .@3 @@@ -@9 @@@ , @@@ +@@ *@@ )@@ (@ w u g@ X@@=@@@ '@ E =@@@ &@@ %@@ $@R M@@@ # @@@ "@@ !@@ @  @@@V@@@ @@@@ @@ @@ @k@@@ @@@ @@ @@ @@k@x]@@@ Q@x@@@ @j@@ @@@ @@ @*(@ @@@@@ @@@ @@@ @@@ @@ @@@@@@ i@@@@ @@@ @@@ @@ @_]O@@@2@@@ $#@@@@ @A@@ @@@ @@ @@@@@@ @ݠ@@@ @@@@ @@@ @@@ @@ @@ @~p@a@]\@@@@ @@@@ @@@ @F@@@  J@@@ @@ @@ @@@ߠ@@@@ @@@ @@@ $@@@ @@ @@@mqP@@@3rqqrrrrr@@Aws;/;;U@@ Z Functor building an implementation of the map structure given a totally ordered type. t;i;iu;;@@@@@@@s;/;/f@g@@_K@F?+B@$@"吠@@@@@@(@@@3@1@) poA@hgA@dc@]\@IH@.-@@@@@@@@xw@cb@RQ@=<@,+@@  @@@@@@nm@YX@IH@43@@@@@@@@@fe@ON@87@#"@ @@@@@@m{@A@ H************************************************************************ A@@ A@L@ H  BMM BM@ H OCaml  C C@ H  D D3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt  E44 E4@ H  $F %F@ H Copyright 1996 Institut National de Recherche en Informatique et  *G +G@ H en Automatique.  0H 1Hg@ H  6Ihh 7Ih@ H All rights reserved. This file is distributed under the terms of  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}. L ** Input signature of the functor {!Make}. (0* {1:maps Maps} <* The type of the map keys. ܠ 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. 㠠 * [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 M 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  o* [singleton x y] returns the one-element map that contains a binding [y] for [x]. @since 3.12 M 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. ࠠ * [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 H >* Return the number of bindings of a map. @since 3.12 8* {1:bindings Bindings} ڠ * 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 q * 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  * 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 P * 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 ڠ:* {1:searching Searching}  r* [find x m] returns the current value of [x] in [m], or raises [Not_found] if no binding for [x] exists. n * [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 v * [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 ۠ * [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 P * [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 <* {1:traversing Traversing}  * [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} y 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 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  * [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.  I* Test whether a map has exactly one element or not. @since 5.5  Z ]* [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.  _ * 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  F 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  J 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 @@0V9N?YFQK|3! !!! ! ! ! ! @!@@8CamlinternalFormatBasics0%FU(Q/Tu&Stdlib0-i8Q"L{v;.Stdlib__Either0Vy`u~c à!K0hؤ5O8% By+Stdlib__Seq0nwzG&amg@0hؤ5O8% ByAt@u<@{ @@]Đz@@m@   & @ ϐ Y@q@w @@Β@@CR F аG@+@  WY@ 5@ C ݐR@@O@`P@@  WZްd@+@@CK@ c ͰX@ H@U@.@M@PʐYb@@P@@