Caml1999I037)e+Stdlib__Set+OrderedType!!t%;@@@A@@@@@'set.mlitt@@@@@@A@'compare&@@@@@@@@#intA@@@@@@@@ww@@-A@@@@rxx   @1B@@!S"#elt';@@@A@@@@@0G  "1G  *@@@@BC@A@!t(;@@@A@@@@@:J U Y;J U _@@@@LD@A@%empty)@@@@GM ~ HM ~ @@YE@@#add*@)@@@@@@@@@@@@@@@^P  _P  @@pF@@)singleton+@@@@)@@@@@ @oV  pV  @@G@@&remove,@(@@@!@<@@@"?@@@#@@$@@%@Y 5 9Y 5 R@@H@@%union-@M@@@&@R@@@'U@@@(@@)@@*@_]a_]w@@I@@%inter.@c@@@+@h@@@,k@@@-@@.@@/@bb@@J@@(disjoint/@y@@@0@~@@@1$boolE@@@2@@3@@4@ee@@K@@$diff0@@@@5@@@@6@@@7@@8@@9@i(,i(A@@L@@(cardinal1@@@@:@@@;@@<@mm@@M@@(elements2@@@@=$listK@@@>@@@?@@@@ r r7@@N@@'min_elt3@@@@A@@@B@@C@x x5@@-O@@+min_elt_opt4@@@@D&optionL@@@E@@@F@@G@3}4}@@EP@@'max_elt5@@@@H@@@I@@J@DE@@VQ@@+max_elt_opt6@ @@@K)@@@L@@@M@@N@Z[>@@lR@@&choose7@"@@@O@@@P@@Q@kl@@}S@@*choose_opt8@3@@@RP+@@@S@@@T@@U@@@T@@$find9@:@@@V@N@@@WB@@@X@@Y@@Z@@@U@@(find_opt:@P@@@[@d@@@\\@@@]@@@^@@_@@`@x|x@@V@@*find_first;@@m@@@a@@@b@@c@@@@dy@@@e@@f@@g@KOKx@@W@@.find_first_opt<@@@@@h@@@i@@j@@@@k@@@l@@@m@@n@@o@RVR@@X@@)find_last=@@@@@p;@@@q@@r@@@@s@@@t@@u@@v@ { {@@Y@@-find_last_opt>@@@@@wW@@@x@@y@@@@z@@@{@@@|@@}@@~@,-@@>Z@@$iter?@@@@@$unitF@@@@@@@@@ @@@@@@@@KL@@][@@$fold@@@@@@@#acc@@@@@@ @@@@  @@@@@@@hi@@z\@@#mapA@@#@@@&@@@@@@:@@@=@@@@@@@@@@]@@&filterB@@>@@@@@@@@@V@@@Y@@@@@@@@    @@^@@*filter_mapC@@Z@@@a@@@@@@@@@v@@@y@@@@@@@@"" ""7@@_@@)partitionD@@z@@@ @@@@@@@@@@@@@@@@@@@@@@@@$;$?$;$i@@`@@%splitE@@@@@@@@@@@@@<@@@@@@@@@@@@@@ %Z%^ %Z%@@a@@(is_emptyF@@@@S@@@@@@'$'('$'?@@-b@@#memG@@@@@@@@j@@@@@@@@2'p't3'p'@@Dc@@%equalH@@@@@@@@@@@@@@@@I ''J ''@@[d@@'compareI@@@@@@@@G@@@@@@@@`(_(ca(_(}@@re@@&subsetJ@(@@@@-@@@@@@@@@@@w((x() @@f@@'for_allK@@2@@@@@@@@@J@@@@@@@@@@@)f)j)f)@@g@@&existsL@@O@@@@@@@@@g@@@@@@@@@@@)))*@@h@@'to_listM@y@@@q@@@@@@@@@ ** **@@i@@'of_listN@Ҡ@@@@@@@@@@@@$+ + $+ +'@@j@@+to_seq_fromO@@@@@@@@&Stdlib#Seq!t@@@@@@@@@@@*,,*,,/@@k@@&to_seqP@@@@#Seq!t@@@@@@@@@/,,/,,@@)l@@*to_rev_seqQ@@@@5#Seq!t@@@@@@@@@03-*-.13-*-M@@Bm@@'add_seqR@K#Seq!t@@@@@@@@@@@@@@@@@@N7--O7--@@`n@@&of_seqS@i#Seq!t@@@@@@!@@@@@@g;..h;...@@yo@@@@kB  l>.r.w@}p@@Ӡ$Make#@#Ord$RT;@@@A!t@@@5@@@@A..A..@@@@r@A@XU;@@@A@@@@@W@@@TA@SV @@@6@R@O@NW@$@@@7@@@@8@@@9@@:@@;@M@J@IX@@@@<@@@=@@>@H@E@DY@@@@?@-@@@@0@@@A@@B@@C@C@@@?Z@9@@@D@>@@@EA@@@F@@G@@H@>@;@:[@J@@@I@O@@@JR@@@K@@L@@M@9@6@5\@[@@@N@`@@@O4@@@P@@Q@@R@1@.@-]@l@@@S@q@@@Tt@@@U@@V@@W@,@)@(^@}@@@X'@@@Y@@Z@&@#@"_@@@@[!@@@\@@@]@@^@@@`@@@@_@@@`@@a@@@a@@@@b@@@c@@@d@@e@@@ b@@@@f@@@g@@h@ @ @c@@@@i@@@j@@@k@@l@@@d@@@@m@@@n@@o@@@e@@@@p@@@q@@@r@@s@@@f@@@@t@@@@u@@@v@@w@@x@@@g@@@@y@@@@z@@@{@@@|@@}@@~@@@h@@ @@@@@@@@@@@@@@@@@@@@@@i@@!@@@@@@@@@3@@@/@@@@@@@@@@@@@j@@;@@@@@@@@@M@@@F@@@@@@@@@@k@@Q@@@@@@@@@c@@@נ_@@@@@@@@@@@@@l@@k@@@@@@@@@}@@@@@@@@@@@@@m@@@@@@@@@@@@@@@@@@@@@@@@@n@@@@@@@@@@@@@@@@@@@@@@@@o@@@@@@@@@@@@@@@@@@@@@@@@p@@@@@@@@@@@@@@@@@@@@@@@@@@@q@@@@@@@@@@@@@@@@@@Ǡ@@@@@@@@@@@@@r@@@@@@@@@@@@Ϡ@@@@Π@@@@@@@@@@@@@s@"@@@@@@@@@@@t@$@@@@3@@@@@@@@@@@@@u@?@@@@D@@@@@@@@@@@@@v@P@@@@U@@@@@@@@@@@@@w@a@@@@f@@@@@@@@@@@@@x@@j@@@@@@@@@|@@@@@@@@@@@@@y@@@@@~@@@@@@@@@}@@@@@@@@|@y@xz@@@@w@@@@@@@@@v@s@r{@q@@@@@@@@@@@@p@m@l|@@@@@@@@khg@@@@@@@@@@@f@c@b}@@@@}a`@@@@@@@@ @_@\@[~@@@@ ZY@@@ @@@ @@ @X@U@T@SR@@@@@@@@@@@@@@@@@@Q@N@M@LK @@@@@@@@@@@@J@G@@@A..)@s@@@@^L+Stdlib__Set0\$;7 +Stdlib__Seq0nwzG&amg.Stdlib__Either0Vy`u~c à&Stdlib0Lku]8_٠8CamlinternalFormatBasics0%FU(Q/Tu@@@Caml1999T037?vm"C+Stdlib__Set*ocaml.text&_none_@@A  Sets over ordered types. This module implements the set data structure, given a total ordering function over the set elements. All operations over sets are purely applicative (no side-effects). The implementation uses balanced binary trees, and is therefore reasonably efficient: insertion and membership take time logarithmic in the size of the set, for instance. The {!Make} functor constructs implementations for any type, given a [compare] function. 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 PairsSet = Set.Make(IntPairs) let m = PairsSet.(empty |> add (2,3) |> add (5,7) |> add (11,13)) ]} This creates a new module [PairsSet], with a new type [PairsSet.t] of sets of [int * int]. 'set.mliSptv@@@@@@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+OrderedTypeBrxrx@B@БA+!tAtt@@;@@@A@@@@@t@)ocaml.doc? The type of the set elements. uu@@@@@@@@@@@@@A@ѐ@@@@@@@3@@A#@'compareww@б@г7!tww@@ @@@3@B<@A@@б@гH!tww@@ @@@@@гҠ#intww@@ @@@@@@@@!@@@'@@$* @@@ w@^  A total ordering function over the set elements. This is a two-argument function [f] such that [f e1 e2] is zero if the elements [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}. x~  @@@@@@@3A@@@n.@@@@@@C@A@["@@3*))*****@H]$@A3-,,-----@+@A2s3  @@D ) Input signature of the functor {!Make}. A@  B@  @@@@@@@Drxx@B@!SENB  OB  @gp@Бhg/ {1:sets Sets} dE  eE  @@@@@@3cbbccccc@bA@d@@:9@99@@@9@9@6@AA+#eltCG  'G  *@@;@@A@@@@@G  "@א? The type of the set elements. H + /H + S@@@@@@@@@C@@@A@@@@@@@@;@A+!tDJ U ^J U _@@;@@A@@@@@J U Y@3 The type of sets. K ` dK ` |@@@@@@@@@D@@@A@ϐ@@@@@@@3@eNH@A!@%emptyM ~ M ~ @г3!tM ~ M ~ @@ @@@3@>8@A@@@M ~  @90 The empty set. N  N  @@@@@@@E@@@I @@@@@@!#add P   P  @б@г#eltP  P  @@ @@@3@:M8@A@@б@г}!t(P  )P  @@ @@@@@г!t5P  6P  @@ @@@@@@@@!@@@'@@$* @@@CP  @ [add x s] returns a set containing all elements of [s], plus [x]. If [x] was already in [s], [s] is returned unchanged (the result of the function is then physically equal to [s]). @before 4.03 Physical equality was not ensured. PQ  QT  @@@@@@@iF@@@d@@@@@@C)singletongV  hV  @б@г#eltrV  sV  @@ @@@3tssttttt@\q8@A@@г֠!tV  V  @@ @@@@@@@@@@@V   @ݐ @ [singleton x] returns the one-element set containing only [x]. W  W  3@@@@@@@G@@@@@@@@@1&removeY 5 =Y 5 C@б@г9#eltY 5 EY 5 H@@ @@@3@J_8@A@@б@г!!tY 5 LY 5 M@@ @@@@@г.!tY 5 QY 5 R@@ @@@@@@@@!@@@'@@$* @@@Y 5 9@8 [remove x s] returns a set containing all elements of [s], except [x]. If [x] was not in [s], [s] is returned unchanged (the result of the function is then physically equal to [s]). @before 4.03 Physical equality was not ensured. Z S W]![@@@@@@@ H@@@H@@@@@@C%union _]e _]j@б@гk!t_]l_]m@@ @@@3@\q8@A@@б@г|!t'_]q(_]r@@ @@@@@г!t4_]v5_]w@@ @@@@@@@@!@@@'@@$* @@@B_]a@, Set union. O`x|P`x@@@@@@@hI@@@c@@@@@@C%interfbgb@б@гƠ!tqbrb@@ @@@3srrsssss@\q8@A@@б@гנ!tbb@@ @@@@@г䠐!tbb@@ @@@@@@@@!@@@'@@$* @@@b@3 Set intersection. cc@@@@@@@J@@@@@@@@@C(disjointee@б@г!!tee@@ @@@3@\q8@A@@б@г2!tee@@ @@@@@г$boolee@@ @@@@@@@@!@@@'@@$* @@@e@I 4 Test if two sets are disjoint. @since 4.08 fg&@@@@@@@K@@@Y@@@@@@C$diffi(0i(4@б@г|!t'i(6(i(7@@ @@@3)(()))))@\q8@A@@б@г!t8i(;9i(<@@ @@@@@г!tEi(@Fi(A@@ @@@@@@@@!@@@'@@$* @@@Si(,@ Z Set difference: [diff s1 s2] contains the elements of [s1] that are not in [s2]. `jBFak@@@@@@@yL@@@t@@@@@@C(cardinalwmxm@б@гנ!tmm@@ @@@3@\q8@A@@гd#intmm@@ @@@@@@@@@@@m @퐠 ) Return the number of elements of a set. nn@@@@@@@M@@@@@@@@@1ʐ7 {1:elements Elements} pp@@@@@@3@CX1@A(elements r r(@б@г3!tr*r+@@ @@@@@г\$listr3r7@гs#eltr/r2@@ @@@1@@@@@@6 @@@"@@9%@@@r@V Return the list of all elements of the given set. The returned list is sorted in increasing order with respect to the ordering [Ord.compare], where [Ord] is the argument given to {!Set.Make}. s8<v@@@@@@@+N@@*@f&@@@@@@X'min_elt!)x$*x+@б@г!t4x-5x.@@ @@@365566666@ql8@A@@г#eltCx2Dx5@@ @@@@@@@@@@@Nx  @ Return the smallest element of the given set (with respect to the [Ord.compare] ordering), or raise [Not_found] if the set is empty. [y6:\{@@@@@@@tO@@@o@@@@@@1+min_elt_opt"r}s}@б@гҠ!t}}~}@@ @@@3~~@J_8@A@@гࠐ&option}}@г#elt}}@@ @@@@@@@@@ @@@$@@!'@@@}@ Return the smallest element of the given set (with respect to the [Ord.compare] ordering), or [None] if the set is empty. @since 4.05 ~@@@@@@@P@@*@ǐ@@@@@@@'max_elt#@б@г*!t@@ @@@3@Yn8@A@@гb#elt@@ @@@@@@@@@@@ @@ O Same as {!min_elt}, but returns the largest element of the given set. @@@@@@@Q@@@P@@@@@@1+max_elt_opt$"-@б@гs!t/0@@ @@@3      @J_8@A@@г&option-8.>@г#elt7487@@ @@@@@@@@@ @@@$@@!'@@@G@ g Same as {!min_elt_opt}, but returns the largest element of the given set. @since 4.05 T?CU@@@@@@@mR@@*@h@@@@@@@&choose%kl@б@гˠ!tvw@@ @@@3xwwxxxxx@Yn8@A@@г#elt@@ @@@@@@@@@@@ @ᐠ Return one element of the given set, or raise [Not_found] if the set is empty. Which element is chosen is unspecified, but equal elements will be chosen for equal sets. Q@@@@@@@S@@@@@@@@@1*choose_opt&@б@г!t@@ @@@3@J_8@A@@г"&option@гV#elt@@ @@@@@@@@@ @@@$@@!'@@@@9 Return one element of the given set, or [None] if the set is empty. Which element is chosen is unspecified, but equal elements will be chosen for equal sets. @since 4.05 i@@@@@@@T@@*@I @@@@@@@9 {1:searching Searching} @@@@@@3@Rg1@A$find' @б@г#elt*+@@ @@@@@б@г!t9:@@ @@@)@@гĠ#eltFG@@ @@@6@@@@@9@@@%@@<( @@@T@ [find x s] returns the element of [s] equal to [x] (according to [Ord.compare]), or raise [Not_found] if no such element exists. @since 4.01 ab`v@@@@@@@zU@@@u@@@@@@[(find_opt(xxyx@б@г#eltxx@@ @@@3@to8@A@@б@г預!txx@@ @@@@@г&optionxx@г)#eltxx@@ @@@(@@@@@@- @@@"@@0%@@@6@@39@@@x|@ [find_opt x s] returns the element of [s] equal to [x] (according to [Ord.compare]), or [None] if no such element exists. @since 4.05 3I@@@@@@@V@@-@ߐ@@@@@@R*find_first)KSK]@б@б@гm#eltK`Kc@@ @@@3@m:@A@@г$boolKgKk@@ @@@@@@@@@@б@гe!t Kp Kq@@ @@@!@@г#elt Ku Kx@@ @@@.@@@@@1@@@$@@4 )K_ @@@ ,KO@}  [find_first f s], where [f] is a monotonically increasing function, returns the lowest element [e] of [s] such that [f e], or raises [Not_found] if no such element exists. For example, [find_first (fun e -> Ord.compare e x >= 0) s] will return the first element [e] of [s] where [Ord.compare e x >= 0] (intuitively: [e >= x]), or raise [Not_found] if [x] is greater than any element of [s]. @since 4.05  9y} ::P@@@@@@@ RW@@@ M@@@@@@T.find_first_opt* PRZ QRh@б@б@г۠#elt ]Rk ^Rn@@ @@@3 _ ^ ^ _ _ _ _ _@o:@A@@г !$bool lRr mRv@@ @@@@@@@@@@б@гӠ!t ~R{ R|@@ @@@!@@гߠ&option R R@г#elt R R@@ @@@8@@@@@@= @@@"@@@%@@@3@@C Rj@@@ RV@ [find_first_opt f s], where [f] is a monotonically increasing function, returns an option containing the lowest element [e] of [s] such that [f e], or [None] if no such element exists. @since 4.05   py@@@@@@@ X@@.@  ʐ@@@@@@c)find_last+ { {@б@б@гX#elt { {@@ @@@3        @~:@A@@г $bool { {@@ @@@@@@@@@@б@гP!t { {@@ @@@!@@г#elt { {@@ @@@.@@@@@1@@@$@@4 { @@@ {@h [find_last f s], where [f] is a monotonically decreasing function, returns the highest element [e] of [s] such that [f e], or raises [Not_found] if no such element exists. @since 4.05  $ %l@@@@@@@ =Y@@@x 8@@@@@@T-find_last_opt, ; <@б@б@гƠ#elt H I@@ @@@ 3 J I I J J J J J@o:@A@@г $bool W X@@ @@@ @@@@@ @@б@г!t i j@@ @@@ !@@г ʠ&option v w@г#elt  @@ @@@ 8@@@@@@= @@@"@@@%@@@3@@C @@@ @吠 [find_last_opt f s], where [f] is a monotonically decreasing function, returns an option containing the highest element [e] of [s] such that [f e], or [None] if no such element exists. @since 4.05   @@@@@@@ Z@@.@ @@@@@@c  ; {1:traversing Traversing}   @@@@@@3        @u1@A$iter-  @б@б@гV#elt  @@ @@@@@г $unit  @@ @@@)@@@@@,@@б@гL!t  @@ @@@;@@г $unit  @@ @@@H@@@@@K@@@$@@N  @@@ @ d [iter f s] applies [f] in turn to all elements of [s]. The elements of [s] are presented to [f] in increasing order with respect to the ordering over the type of the elements.   !x@@@@@@@ 9[@@@ t 4@@@@@@n$fold. 7 8@б@б@г #elt D E@@ @@@3 F E E F F F F F@:@A@@б@А#acc@"E@  W X@@А#acc  ] ^@@@@@ @@@@@!@@б@гà!t n o@@ @@@*@@б@А#acc(0 z {@@А#acc.6  @@@33@@; @@@@@>@@@(@@ A  @@@ @ ߐ [fold f s init] computes [(f xN ... (f x2 (f x1 init))...)], where [x1 ... xN] are the elements of [s], in increasing order.   >@@@@@@@ \@@@  @@@@@@a  ? {1:transforming Transforming}   @@@@@@3        @s1@A#map/  @б@б@г P#elt  @@ @@@#@@г ]#elt  @@ @@@$)@@@@@%,@@б@г F!t  @@ @@@&;@@г S!t  @@ @@@'H@@@@@(K@@@$@@)N  @@@ @ ^  [map f s] is the set whose elements are [f a0],[f a1]... [f aN], where [a0],[a1]...[aN] are the elements of [s]. The elements are passed to [f] in increasing order with respect to the ordering over the type of the elements. If no element of [s] is changed by [f], [s] is returned unchanged. (If each output of [f] is physically equal to its input, the returned set is physically equal to [s].) @since 4.04     @@@@@@@ 3]@@@ n .@@@@@@n&filter0 1   2  @б@б@г #elt >   ?  @@ @@@*3 @ ? ? @ @ @ @ @@:@A@@г $bool M   N  @@ @@@+@@@@@,@@б@г !t _   `  @@ @@@-!@@г !t l   m  @@ @@@..@@@@@/1@@@$@@04 x   @@@ {  @ ̐  [filter f s] returns the set of all elements in [s] that satisfy predicate [f]. If [f] satisfies every element in [s], [s] is returned unchanged (the result of the function is then physically equal to [s]). @before 4.03 Physical equality was not ensured.    !"@@@@@@@ ^@@@  @@@@@@T*filter_map1 "" ""@б@б@г *#elt "" ""@@ @@@13        @o:@A@@г &option ""& "",@г C#elt """ ""%@@ @@@2@@@@@@4 @@@$@@5!'@@б@г 1!t ""1 ""2@@ @@@60@@г >!t ""6 ""7@@ @@@7=@@@@@8@@@@$@@9C "" @@@ "" @ I  [filter_map f s] returns the set of all [v] such that [f x = Some v] for some element [x] of [s]. For example, {[filter_map (fun n -> if n mod 2 = 0 then Some (n / 2) else None) s]} is the set of halves of the even elements of [s]. If no element of [s] is changed or dropped by [f] (if [f x = Some x] for each element [x]), then [s] is returned unchanged: the result of the function is then physically equal to [s]. @since 4.11  "8"< $#$9@@@@@@@ _@@@ Y @@@@@@c)partition2 $;$C $;$L@б@б@г #elt )$;$O *$;$R@@ @@@:3 + * * + + + + +@~:@A@@г $bool 8$;$V 9$;$Z@@ @@@;@@@@@<@@б@г !t J$;$_ K$;$`@@ @@@=!@@В@г !t [$;$d \$;$e@@ @@@>2@@@г !t j$;$h k$;$i@@ @@@?A@@@@@ @@@H @@@- @@AK0@@@>@@BN }$;$N@@@ $;$?@ ѐ [partition f s] returns a pair of sets [(s1, s2)], where [s1] is the set of all the elements of [s] that satisfy the predicate [f], and [s2] is the set of all the elements of [s] that do not satisfy [f].  $j$n %1%X@@@@@@@ `@@&@  @@@@@@n%split3 %Z%b %Z%g@б@г -#elt %Z%i %Z%l@@ @@@C3        @8@A@@б@г !t %Z%p %Z%q@@ @@@D@@В@г &!t %Z%u %Z%v@@ @@@E"@@@г $bool %Z%y %Z%}@@ @@@F1@@@г D!t %Z% %Z%@@ @@@G@@@@@&@@ @@HI-@@@> @@ILA@@@R@@JOU@@@%Z%^@ W a [split x s] returns a triple [(l, present, r)], where [l] is the set of elements of [s] that are strictly less than [x]; [r] is the set of elements of [s] that are strictly greater than [x]; [present] is [false] if [s] contains no element equal to [x], or [true] if [s] contains an element equal to [x]. %%&&@@@@@@@,a@@'@ g'@@@@@@n54 + {1:predicates Predicates and comparisons} 1&&2&'"@@@@@@30//00000@1@A(is_empty4='$',>'$'4@б@г !tH'$'6I'$'7@@ @@@K@@г $boolU'$';V'$'?@@ @@@L'@@@@@M*@@@`'$'( @ % Test whether a set is empty or not. m'@'Dn'@'n@@@@@@@b@@@ @@@@@@I#mem5'p'x'p'{@б@г #elt'p'}'p'@@ @@@N3@b]8@A@@б@г !t'p''p'@@ @@@O@@гb$bool'p''p'@@ @@@P@@@@@Q!@@@'@@R$* @@@'p't@ 5 [mem x s] tests whether [x] belongs to the set [s]. ''''@@@@@@@c@@@ ܐ@@@@@@C%equal6 '' ''@б@г ?!t '' ''@@ @@@S3@\q8@A@@б@г P!t '' ''@@ @@@T@@г$bool ''  ''@@ @@@U@@@@@V!@@@'@@W$* @@@ ''@ g h [equal s1 s2] tests whether the sets [s1] and [s2] are equal, that is, contain equal elements. # ''$ (+(]@@@@@@@.r.w@@? * Output signature of the functor {!Make}. ?.x.x?.x.@@@@@@@B  @3@@A@$MakeF A.. A..@%s@@Т#OrdGA..A..@Р+OrderedType!A.."A..@3!  !!!!!@A@A@^I@)@@P@0@@~E@%@@r>@ @  @  Z@ : @  @  g@ 4 @  @ u )@  @  B@ " @  J@ *@T@4@m@M@c@0 @@Y@9@@;@@h@H@@B@"@r@R@@Ӑ@@@@@@=@Aml@@УРI!SA..A..@3@x@@q@@A  @@&#eltA..A..@+.@;@@@A!t@@@ @@@@A..A..@@@@r@@@Aг #OrdA..A..@A..@@@/@@@@OH;@@@A! @@@ @@@@@@@A@0H;@@@A@@@@@,*@@A@  @@@ @@@@@@ @@@@ @@@ @@ ~@@ }@@@@@@ |@@@ {@@ z@use@V@@@@ y@-@@@ x0@@@ w@@ v@@ u@+)@ @9@@@ t@>@@@ sA@@@ r@@ q@@ p@@@J@@@ o@O@@@ nR@@@ m@@ l@@ k@@x@[@@@ j@`@@@ i^@@@ h@@ g@@ f@MK=@.@l@@@ e@q@@@ dt@@@ c@@ b@@ a@@@}@@@ `@@@ _@@ ^@@@@@@ ]@@@ \@@@ [@@ Z@mk]@N@@@@ Y@@@ X@@ W@0. @@@@@ V@@@ U@@@ T@@ S@@@@@@ R@@@ Q@@ P@@@@@@ O|@@@ N@@@ M@@ L@caS@D@@@@ K@@@ J@@ I@&$@@@@@ H @@@ G@@@ F@@ E@   @ @@@@ D@@@@ C@@@ B@@ A@@ @@   s@ d@@@@ ?@@@@ > J@@@ =@@@ <@@ ;@@ :@ . , @ @@ @@@ 9 @@@ 8@@ 7@@@@ 6@@@ 5@@ 4@@ 3@   @ @@!@@@ 2 @@@ 1@@ 0@3@@@ / /@@@ .@@@ -@@ ,@@ +@ s q c@ T@@;@@@ * D@@@ )@@ (@M@@@ 'F@@@ &@@ %@@ $@   @ @@Q@@@ # @@@ "@@ !@c@@@  ՠ_@@@ @@@ @@ @@ @   @ @@k@@@  x@@@ @@ @}@@@  a@@@ @@ @@ @ O M ?@ 0@@@@@ @  @@ @@ @@@@ @ $ $@@ @@ @@ @   @ @@@@@ @@@ @@ @@@@ @@@ @@ @@ @  } o@ `@@@@@  P@@@ @@ @@@@ @@@ @@ @@ @ ' % @ @@@@@  @@@ @@@ @@ @@@@ @@@ @@ @@ @   @ @@@@@  @@@ @@ @@@@ @@@@ @@@@ @@ @@ @@ @ [ Y K@ <@@@@ @@@@ @@@@ ꠠ@ @@@ 렠@@@@ @@ @@ @@ @@@!@@@ @@@ @@ @@@#@@@ @2@@@ m@@@ @@ @@ @\ZL@=@>@@@ @C@@@ #@@@ @@ @@ @@@O@@@ @T@@@ @@@ @@ @@ @@@`@@@ @e@@@ @@@ @@ @@ @~|n@_@@i@@@ O@@@ @@ @{@@@ 8@@@ @@ @@ @&$@@@@@@ @@@ @@ @@@@ @@@ @@ @@ @@@@@@ @@@ @@@ @@ @use@V@R@@@ @@@ @@@ @@ @-+@@@@@ @@@@ @@@ @@@ @@ @@ @@@@@@ *@@@ @@@ @@ @r@c@@@@ <SR@@@ @@@ @@ @31#@@K@@@ @@@ @@@@ @@@ @@ @@ @@@b @@@ @@@ @@@ @@ @x@@_cB@@23@@AA..G@@O Z Functor building an implementation of the set structure given a totally ordered type.  B.. C//B@@@@@@@A..X@Y@@}y@/@@"l@@@@@@@@@3#""#####@!@baA@ZYA@WV@QP@A@@76@('@@  @@@@@@@@@@@}|@ji@VU@>=@*)@@@@@@@@rq@hg@YX@JI@;:@,+@@@@@@@@@@kyy@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 set.mli, do not edit it directly! Instead, edit templates/set.template.mli and run tools/sync_stdlib_docs P77Q{@ * Sets over ordered types. This module implements the set data structure, given a total ordering function over the set elements. All operations over sets are purely applicative (no side-effects). The implementation uses balanced binary trees, and is therefore reasonably efficient: insertion and membership take time logarithmic in the size of the set, for instance. The {!Make} functor constructs implementations for any type, given a [compare] function. 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 PairsSet = Set.Make(IntPairs) let m = PairsSet.(empty |> add (2,3) |> add (5,7) |> add (11,13)) ]} This creates a new module [PairsSet], with a new type [PairsSet.t] of sets of [int * int]. 堠 * The type of the set elements. * * A total ordering function over the set elements. This is a two-argument function [f] such that [f e1 e2] is zero if the elements [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:sets Sets}  * The type of the set elements. a4* The type of sets. ;1* The empty set.  * [add x s] returns a set containing all elements of [s], plus [x]. If [x] was already in [s], [s] is returned unchanged (the result of the function is then physically equal to [s]). @before 4.03 Physical equality was not ensured.  A* [singleton x] returns the one-element set containing only [x]. g * [remove x s] returns a set containing all elements of [s], except [x]. If [x] was not in [s], [s] is returned unchanged (the result of the function is then physically equal to [s]). @before 4.03 Physical equality was not ensured. -* Set union. 4* Set intersection. _ 5* Test if two sets are disjoint. @since 4.08  [* Set difference: [diff s1 s2] contains the elements of [s1] that are not in [s2].  ** Return the number of elements of a set. i8* {1:elements Elements} N * Return the list of all elements of the given set. The returned list is sorted in increasing order with respect to the ordering [Ord.compare], where [Ord] is the argument given to {!Set.Make}.  * Return the smallest element of the given set (with respect to the [Ord.compare] ordering), or raise [Not_found] if the set is empty.  * Return the smallest element of the given set (with respect to the [Ord.compare] ordering), or [None] if the set is empty. @since 4.05 k P* Same as {!min_elt}, but returns the largest element of the given set. % h* Same as {!min_elt_opt}, but returns the largest element of the given set. @since 4.05 Р * Return one element of the given set, or raise [Not_found] if the set is empty. Which element is chosen is unspecified, but equal elements will be chosen for equal sets.  * Return one element of the given set, or [None] if the set is empty. Which element is chosen is unspecified, but equal elements will be chosen for equal sets. @since 4.05 5:* {1:searching Searching}  * [find x s] returns the element of [s] equal to [x] (according to [Ord.compare]), or raise [Not_found] if no such element exists. @since 4.01 Ϡ * [find_opt x s] returns the element of [s] equal to [x] (according to [Ord.compare]), or [None] if no such element exists. @since 4.05 h * [find_first f s], where [f] is a monotonically increasing function, returns the lowest element [e] of [s] such that [f e], or raises [Not_found] if no such element exists. For example, [find_first (fun e -> Ord.compare e x >= 0) s] will return the first element [e] of [s] where [Ord.compare e x >= 0] (intuitively: [e >= x]), or raise [Not_found] if [x] is greater than any element of [s]. @since 4.05  * [find_first_opt f s], where [f] is a monotonically increasing function, returns an option containing the lowest element [e] of [s] such that [f e], or [None] if no such element exists. @since 4.05  * [find_last f s], where [f] is a monotonically decreasing function, returns the highest element [e] of [s] such that [f e], or raises [Not_found] if no such element exists. @since 4.05  * [find_last_opt f s], where [f] is a monotonically decreasing function, returns an option containing the highest element [e] of [s] such that [f e], or [None] if no such element exists. @since 4.05 <* {1:traversing Traversing}  * [iter f s] applies [f] in turn to all elements of [s]. The elements of [s] are presented to [f] in increasing order with respect to the ordering over the type of the elements. % * [fold f s init] computes [(f xN ... (f x2 (f x1 init))...)], where [x1 ... xN] are the elements of [s], in increasing order.  * {1:transforming Transforming}  * [map f s] is the set whose elements are [f a0],[f a1]... [f aN], where [a0],[a1]...[aN] are the elements of [s]. The elements are passed to [f] in increasing order with respect to the ordering over the type of the elements. If no element of [s] is changed by [f], [s] is returned unchanged. (If each output of [f] is physically equal to its input, the returned set is physically equal to [s].) @since 4.04  4  * [filter f s] returns the set of all elements in [s] that satisfy predicate [f]. If [f] satisfies every element in [s], [s] is returned unchanged (the result of the function is then physically equal to [s]). @before 4.03 Physical equality was not ensured. ɠ * [filter_map f s] returns the set of all [v] such that [f x = Some v] for some element [x] of [s]. For example, {[filter_map (fun n -> if n mod 2 = 0 then Some (n / 2) else None) s]} is the set of halves of the even elements of [s]. If no element of [s] is changed or dropped by [f] (if [f x = Some x] for each element [x]), then [s] is returned unchanged: the result of the function is then physically equal to [s]. @since 4.11  O * [partition f s] returns a pair of sets [(s1, s2)], where [s1] is the set of all the elements of [s] that satisfy the predicate [f], and [s2] is the set of all the elements of [s] that do not satisfy [f].  ʠ b* [split x s] returns a triple [(l, present, r)], where [l] is the set of elements of [s] that are strictly less than [x]; [r] is the set of elements of [s] that are strictly greater than [x]; [present] is [false] if [s] contains no element equal to [x], or [true] if [s] contains an element equal to [x].  G ,* {1:predicates Predicates and comparisons}  , &* Test whether a set is empty or not.  6* [mem x s] tests whether [x] belongs to the set [s].  i* [equal s1 s2] tests whether the sets [s1] and [s2] are equal, that is, contain equal elements.  C d* Total ordering between sets. Can be used as the ordering function for doing sets of sets.  렠 Q* [subset s1 s2] tests whether the set [s1] is a subset of the set [s2].  U* [for_all f s] checks if all elements of the set satisfy the predicate [f].  ( ^* [exists f s] checks if at least one element of the set satisfies the predicate [f]. <* {1:converting Converting}  5* [to_list s] is {!elements}[ s]. @since 5.1 Z * [of_list l] creates a set from a list of elements. This is usually more efficient than folding [add] over the list, except perhaps for lists with many duplicated elements. @since 4.02  * [to_seq_from x s] iterates on a subset of the elements of [s] in ascending order, from [x] or above. @since 4.07  C* Iterate on the whole set, in ascending order @since 4.07 7 D* Iterate on the whole set, in descending order @since 4.12 ٠ C* Add the given elements to the set, in order. @since 4.07 i :* Build a set from the given bindings @since 4.07  +* Output signature of the functor {!Make}.  [* Functor building an implementation of the set 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__Set.cmi"-c Z/home/teraram/ci/builds/workspace/parallel-build/flambda/true/label/ocaml-manycores/stdlib @@0n`de!gG3@@@8CamlinternalFormatBasics0%FU(Q/Tu&Stdlib0Lku]8_٠.Stdlib__Either0Vy`u~c à+Stdlib__Seq0nwzG&amgҐ0\$;7@0\$;7As@ E @QԐ(@]@ B @ΐ@/@@@ @CK@F@@@D~߰@@<@@z@P:@@ <   W@ِ=  @  fW@p@ , xKg@@ N@  ذYǰ@  <@ .W@ S |@hw  L  @@P@@