Caml1999I031(M+Stdlib__Set+OrderedType!t8@@@A@@@@@'set.mlitt@@@@@A@'compare@@@@@@@@#intA@@@@@@@@ww@@,A@@@rxx   @0B@!S#elt8@@@A@@@@@/D  0D  @@@@@CA@!t8@@@A@@@@@8G : >9G : D@@@@IDA@%empty@@@@EJ c gFJ c s@@VE@(is_empty@@@@$boolE@@@@@@YM  ZM  @@jF@#mem@;@@@ @)@@@!@@@"@@#@@$@qP  rP  @@G@#add@@@@%@@@@@&C@@@'@@(@@)@S 9 =S 9 S@@H@)singleton@.@@@*T@@@+@@,@Y Z ^Y Z u@@I@&remove@?@@@-@g@@@.j@@@/@@0@@1@\  \  @@J@%union@x@@@2@}@@@3@@@4@@5@@6@bb@@K@%inter@@@@7@@@@8@@@9@@:@@;@ee2@@L@(disjoint@@@@<@@@@=@@@>@@?@@@@hQUhQq@@M@$diff@@@@A@@@@B@@@C@@D@@E@ll@@N@'compare @@@@F@@@@G@@@H@@I@@J@p15p1O@@/O@%equal!@@@@K@@@@L@@@M@@N@@O@5t6t@@FP@&subset"@@@@P@@@@Q@@@R@@S@@T@LxMQMxMk@@]Q@$iter#@@@@@U$unitF@@@V@@W@#@@@X @@@Y@@Z@@[@k|l|@@|R@#map$@@@@@\@@@]@@^@?@@@_B@@@`@@a@@b@@@S@$fold%@@/@@@c@!a@g@@d@@e@]@@@f@  @@h@@i@@j@@@T@'for_all&@@L@@@k`@@@l@@m@x@@@ni@@@o@@p@@q@vzv@@U@&exists'@@i@@@r}@@@s@@t@@@@u@@@v@@w@@x@*@@V@&filter(@@@@@y@@@z@@{@@@@|@@@}@@~@@@@@ W@*filter_map)@@@@@&optionJ@@@@@@@@@@@@@@@@@@@@@@,X@)partition*@@@@@@@@@@@@@@@@@@@@@@@@@@@>?B@@OY@(cardinal+@@@@7@@@@@@P04Q0J@@aZ@(elements,@@@@$listI@@@@@@@@@hi@@y[@'min_elt-@2@@@@@@@@@yz@@\@+min_elt_opt.@C@@@~'@@@@@@@@@@D@d@@]@'max_elt/@Y@@@9@@@@@@*@@^@+max_elt_opt0@j@@@N@@@@@@@@@@@_@&choose1@@@@`@@@@@@#7@@`@*choose_opt2@@@@̠u@@@@@@@@@ @@a@%split3@@@@@@@@@@@@@@@@@@@@@@@@   !@@b@$find4@@@@@@@@@@@@@@@@""""@@&c@(find_opt5@@@@@@@@@@@@@@@@@@@0#b#f1#b#@@Ad@*find_first6@@@@@@@@@@@@@@@@@@@@@@L$5$9M$5$b@@]e@.find_first_opt7@@@@@ @@@@@@!@@@\@@@@@@@@@@@m&=&An&=&u@@~f@)find_last8@@@@@*@@@@@@B@@@"@@@@@@@@ 'd'h 'd'@@g@-find_last_opt9@@2@@@F@@@@@@^@@@B@@@@@@@@@@@(r(v(r(@@h@'of_list:@WU@@@@@@|@@@@@@))))@@i@+to_seq_from;@g@@@@@@@&Stdlib#Seq!ty@@@@@@@@@@@ ** **@@j@&to_seq<@@@@#Seq!t@@@@@@@@@%+h+l%+h+@@ k@*to_rev_seq=@@@@5#Seq!t@@@@@@@@@)++)++@@$l@'add_seq>@K#Seq!t@@@@@@@@@@@@@@@@@@1-,G,K2-,G,l@@Bm@&of_seq?@i#Seq!t@@@@@@@@@@@@J1,,K1,,@@[n@@@NB  O4--"@_o@Ӡ$Make@#Ordh5@8@@@A!t@@@=@@@@j7-T-}k7-T-@@@@{qA@;A8@@@A@@@@@:@@@7A@6B @@@>@5@2@1C@ @@@?0@@@@@@A@-@*@)D@.@@@B@@@@C(@@@D@@E@@F@'@$@#E@@@@G@-@@@H0@@@I@@J@@K@"@@F@#@@@L<@@@M@@N@@@G@/@@@O@J@@@PM@@@Q@@R@@S@@@H@V@@@T@[@@@U^@@@V@@W@@X@@@I@g@@@Y@l@@@Zo@@@[@@\@@]@@ @ J@x@@@^@}@@@_ @@@`@@a@@b@@@K@@@@c@@@@d@@@e@@f@@g@@@L@@@@h@@@@i@@@j@@k@@l@@@M@@@@m@@@@n@@@o@@p@@q@@@N@@@@r@@@@s@@@t@@u@@v@@@O@@@@@w@@@x@@y@@@@z@@@{@@|@@}@@@P@@@@@~@@@@@@@@@@@@@@@@@@@Q@@@@@@@@@@@@@@@@@@@@@@@@@R@@@@@@@@@@@@@@@@@@@@@@@@S@@@@@@@@@@@.@@@@@@@@@@@@@T@@&@@@@@@@@@D@@@G@@@@@@@@@@U@@<@@@ B@@@@@@@@@^@@@a@@@@@@@@@@V@@V@@@@@@@@@t@@@z@@@~@@@@@@@@@@@@W@@@@@@@@@@@@X@@@@@@@@@@@@@@@Y@@@@@@@@@@@@Z@@@@@@@@@@@@@@@[@@@@@@@@@@@@\@@@@@@@@@@@@@@@]@@@@@@@@@@@@^@@@@@@@@@@@@@@@_@@@@@@@@@@@Ӡ@@@Ҡ @@@@@@@@@@@@`@@@@@@@@@@@@@@@@@|@{a@@@@@)@@@z@@@@@@@@@@@y@v@ub@@%@@@t@@@@@@C@@@0@@@@@@@@s@p@oc@@;@@@n@@@@@@Y@@@mI@@@@@@@@@@@l@i@hd@@U@@@g@@@@@@s@@@`@@@@@@@@f@c@be@@k@@@a@@@@@@@@@`y@@@@@@@@@@@_@\@[f@Z@@@@@@@@@@@@Y@V@Ug@@@@@@@@TQP@@@@@@@@@@ @O@L@Kh@@@@ fJI@@@ @@@ @@ @H@E@Di@@@@xCB@@@@@@@@@A@>@=j@<;@@@@@@@@@@@@@@@@@@:@7@6k@54@@@@@@@@@@@@3@0@@@}7-T-T@r@@@^L+Stdlib__Set0PSVl8 ;+Stdlib__Seq0yt\eǟ&Q,}.Stdlib__Either0 }rCT0J){9)&Stdlib0>,W:(8CamlinternalFormatBasics0cEXy 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@@@@@@0@@@@@@%arrayH8@@M@A@A@@@@@@8@@@$boolE8@@%false^@@B@$true_@@H@@@A@@@@@I@A@$charB8@@@A@@@@@M@A@#exnG8@@AA@@@@@Q@@@5extension_constructorP8@@@A@@@@@U@@@%floatD8@@@A@@@@@Y@@@*floatarrayQ8@@@A@@@@@]@@@#intA8@@@A@@@@@a@A@%int32L8@@@A@@@@@e@@@%int64M8@@@A@@@@@i@@@&lazy_tN8@@O@A@A@Y@@@@@r@@@$listI8@@P@A"[]a@@@"::b@@@Q@@@ @@A@Y@@@@@@@@)nativeintK8@@@A@@@@@@@@&optionJ8@@S@A$Nonec@@@$Somed@@@@@A@Y@@@@@@@@&stringO8@@@A@@@@@@@@$unitF8@@"()`@@@@@A@@@@@@A@ .Assert_failure\ p@@@@Jm@@@@@@V@@A͠=ocaml.warn_on_literal_patternѐ@@0Division_by_zeroY @@@Aנ  @+End_of_fileX !@@@Aߠ@'FailureU )@%@@A蠰@0Invalid_argumentT 2@.@@A񠰠$#@-Match_failureR ;@:67@@\@@A21@ )Not_foundV I@@@A: 9 @-Out_of_memoryS Q@@@ABA@.Stack_overflowZ Y@@@AJI@.Sys_blocked_io[ a@@@AR"Q"@)Sys_errorW i@e@@A([+Z+@:Undefined_recursive_module] r@qmn@@c@@A6i9h9@ %bytesC8@@@A@@@@@=@@@&Stdlib@A6б+OrderedType B=rx>rx@БA(!t ALtMt@@8@@@A@@@@@Pt@)ocaml.doca? The type of the set elements. ^u_u@@@@@@@@@v@@@A@@0^]]^^^^^@\@A@'compare kwlw@б@г*!tvwww@@ @@@0xwwxxxxx@w5/@A@@б@г;!tww@@ @@@@@г>#intww@@ @@@@@@@@!@@@'@@$* @@@w@R  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~  @@@@@@@A@@7@lfA@O@@0@<Q@A0@@As  @@l ) Input signature of the functor {!Make}. @  @  @@@@@@@rxx@ɰ@б!StEB  B  @БA(#elt CD  D  @@8@@@A@@@@@D  @? The type of the set elements. E  E  8@@@@@@@@@ C@@A@@0@A@`@@C6B@A@A(!tD G : C G : D@@8@@@A@@@@@G : >@3 The type of sets. H E IH E a@@@@@@@@@3D@@A@@0@(@:@A@%empty)J c k*J c p@г'!t2J c r3J c s@@ @@@043344444@2,@A@@@<J c g @쐠0 The empty set. HK t xIK t @@@@@@@`E@@(is_emptyTM  UM  @б@гT!t_M  `M  @@ @@@0a``aaaaa@.A,@A@@г=$boolnM  oM  @@ @@@@@@@@@@@yM   @) % Test whether a set is empty or not. N  N  @@@@@@@F@@%#memP  P  @б@г#eltP  P  @@ @@@0@>S,@A@@б@г!tP  P  @@ @@@@@г$boolP  P  @@ @@@@@@@@!@@@'@@$* @@@P  @x 5 [mem x s] tests whether [x] belongs to the set [s]. Q  Q  7@@@@@@@G@@7#addS 9 AS 9 D@б@г#eltS 9 FS 9 I@@ @@@0@Pe,@A@@б@г!tS 9 MS 9 N@@ @@@@@г!t S 9 R S 9 S@@ @@@@@@@@!@@@'@@$* @@@S 9 =@ǐ [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. #T T X$W  X@@@@@@@;H@@7)singleton/Y Z b0Y Z k@б@гV#elt:Y Z m;Y Z p@@ @@@0<;;<<<<<@Pe,@A@@г>!tIY Z tJY Z u@@ @@@@@@@@@@@TY Z ^ @ @ [singleton x] returns the one-element set containing only [x]. `Z v zaZ v @@@@@@@xI@@%&removel\  m\  @б@г#eltw\  x\  @@ @@@0yxxyyyyy@>S,@A@@б@г}!t\  \  @@ @@@@@г!t\  \  @@ @@@@@@@@!@@@'@@$* @@@\  @S [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. ]  `@@@@@@@J@@7%unionbb@б@г!tbb@@ @@@0@Pe,@A@@б@г̠!tbb@@ @@@@@г٠!tbb@@ @@@@@@@@!@@@'@@$* @@@b@, Set union. cc@@@@@@@K@@7%inter e  e%@б@г !te'e(@@ @@@0@Pe,@A@@б@г!t&e,'e-@@ @@@@@г(!t3e14e2@@ @@@@@@@@!@@@'@@$* @@@Ae@񐠠3 Set intersection. Mf37Nf3O@@@@@@@eL@@7(disjointYhQYZhQa@б@гY!tdhQcehQd@@ @@@0feefffff@Pe,@A@@б@гj!tuhQhvhQi@@ @@@@@гQ$boolhQmhQq@@ @@@@@@@@!@@@'@@$* @@@hQU@@ 6 Test if two sets are disjoint. @since 4.08.0 irvj@@@@@@@M@@7$diffll@б@г!tll@@ @@@0@Pe,@A@@б@г!tll@@ @@@@@гƠ!tll@@ @@@@@@@@!@@@'@@$* @@@l@ Y Set difference: [diff s1 s2] contains the elements of [s1] that are not in [s2]. mn/@@@@@@@N@@7'comparep19p1@@б@г!tp1Bp1C@@ @@@0@Pe,@A@@б@г!tp1Gp1H@@ @@@@@гʠ#int p1L!p1O@@ @@@@@@@@!@@@'@@$* @@@.p15@ސ b Total ordering between sets. Can be used as the ordering function for doing sets of sets. :qPT;r@@@@@@@RO@@7%equalFtGt@б@гF!tQtRt@@ @@@0SRRSSSSS@Pe,@A@@б@гW!tbtct@@ @@@@@г>$boolotpt@@ @@@@@@@@!@@@'@@$* @@@}t@- g [equal s1 s2] tests whether the sets [s1] and [s2] are equal, that is, contain equal elements. uvK@@@@@@@P@@7&subsetxMUxM[@б@г!txM]xM^@@ @@@0@Pe,@A@@б@г!txMbxMc@@ @@@@@г$boolxMgxMk@@ @@@@@@@@!@@@'@@$* @@@xMQ@| O [subset s1 s2] tests whether the set [s1] is a subset of the set [s2]. ylpz@@@@@@@Q@@7$iter||@б@б@г #elt||@@ @@@0@Rg.@A@@гY$unit||@@ @@@@@@@@@@б@г!t||@@ @@@!@@гx$unit| |@@ @@@.@@@@@1@@@$@@4+| @@@.|@ސ [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. :};r@@@@@@@RR@@H#mapFG@б@б@гo#eltST@@ @@@0UTTUUUUU@cz.@A@@г~#eltbc@@ @@@@@@@@@@б@гi!ttu@@ @@@!@@гv!t@@ @@@.@@@@@1@@@$@@4 @@@@@  [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.0 @@@@@@@S@@H$fold@б@б@гѠ#elt@@ @@@0@cz.@A@@б@А!a@E@ @@А!a @@@@@ @@@@@!@@б@гԠ!t@@ @@@*@@б@А!a(0@@А!a.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.   +t@@@@@@@#T@@U'for_allv~v@б@б@г@#elt$v%v@@ @@@0&%%&&&&&@p.@A@@г$bool3v4v@@ @@@@@@@@@@б@г:!tEvFv@@ @@@!@@г!$boolRvSv@@ @@@.@@@@@1@@@$@@4^v @@@avz@ S [for_all f s] checks if all elements of the set satisfy the predicate [f]. mn@@@@@@@U@@H&exists yz@б@б@г#elt@@ @@@0@cz.@A@@гd$bool@@ @@@@@@@@@@б@г!t!"@@ @@@!@@г$bool&*@@ @@@.@@@@@1@@@$@@4 @@@@s \ [exists f s] checks if at least one element of the set satisfies the predicate [f]. +/b@@@@@@@V@@H&filter!@б@б@г#elt@@ @@@0@cz.@A@@гƠ$bool@@ @@@@@@@@@@б@г!t  @@ @@@!@@г !t@@ @@@.@@@@@1@@@$@@ 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.12@@@@@@@IW@@H*filter_map"=>@б@б@гf#eltJK@@ @@@ 0LKKLLLLL@cz.@A@@г͠&optionYZ@г#eltcd@@ @@@ @@@@@@  @@@$@@!'@@б@гo!tz { @@ @@@0@@г|!t@@ @@@=@@@@@@@@@$@@C @@@@F  [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.0  @@@@@@@X@@W)partition#%@б@б@гנ#elt(+@@ @@@0@r.@A@@г$bool/3@@ @@@@@@@@@@б@гѠ!t89@@ @@@!@@Вг᠐!t=>@@ @@@1@@г!tAB@@ @@@?@@@@@D @@@)@@G, @@@:@@J '@@@ @ [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].  CG .@@@@@@@ 2Y@#@^(cardinal$ &08 '0@@б@г&!t 10B 20C@@ @@@0 3 2 2 3 3 3 3 3@w,@A@@гꠐ#int @0G A0J@@ @@@@@@@@@@@ K04 @ ) Return the number of elements of a set.  WKO XK}@@@@@@@ oZ@@%(elements% c d@б@гc!t n o@@ @@@0 p o o p p p p p@>S,@A@@г $list } ~@г#elt  @@ @@@ @@@@@@" @@@$@@#!'@@@ @G 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 {!Stdlib.Set.Make}.   _@@@@@@@ [@)@4'min_elt&  @б@г!t  @@ @@@$0        @Mb,@A@@г堐#elt  @@ @@@%@@@@@&@@@  @ Return the smallest element of the given set (with respect to the [Ord.compare] ordering), or raise [Not_found] if the set is empty.   >@@@@@@@ \@@%+min_elt_opt' @H @S@б@г점!t @U @V@@ @@@'0        @>S,@A@@г z&option @^ @d@г,#elt @Z @]@@ @@@(@@@@@@* @@@$@@+!'@@@ @D@А 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  ,ei - @@@@@@@ D]@)@4'max_elt( 8 9 @б@г8!t C" D#@@ @@@,0 E D D E E E E E@Mb,@A@@гn#elt R' S*@@ @@@-@@@@@.@@@ ] @ N Same as {!min_elt}, but returns the largest element of the given set.  i+/ jn@@@@@@@ ^@@%+max_elt_opt) u v@б@гu!t  @@ @@@/0        @>S,@A@@г &option  @г#elt  @@ @@@0@@@@@@2 @@@$@@3!'@@@ @ Y k Same as {!min_elt_opt}, but returns the largest element of the given set. @since 4.05   @@@@@@@ _@)@4&choose* ' -@б@г!t / 0@@ @@@40        @Mb,@A@@г#elt 4 7@@ @@@5@@@@@6@@@ # @ 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.  8< @@@@@@@ `@@%*choose_opt+    @б@г!t    @@ @@@70        @>S,@A@@г &option    @г >#elt "  # @@ @@@8@@@@@@: @@@$@@;!'@@@ 2@ ␠ 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  >  # ?  @@@@@@@ Va@)@4%split, J   K  @б@г q#elt U ! V !@@ @@@<0 W V V W W W W W@Mb,@A@@б@г [!t f ! g !@@ @@@=@@Вг k!t v !  w ! @@ @@@>!@@г S$bool  !  !@@ @@@?/@@г !t  !  !@@ @@@@=@@@# @@AC( @@@8@@BF;@@@L@@CIO@@@   @ V m [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].  !! "P"@@@@@@@ b@#@\$find- "" ""@б@г 堐#elt "" ""@@ @@@D0        @u,@A@@б@г Ϡ!t "" ""@@ @@@E@@г #elt "" ""@@ @@@F@@@@@G!@@@'@@H$* @@@ ""@ [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.0  "" #H#`@@@@@@@ c@@7(find_opt. #b#j #b#r@б@г 4#elt #b#t #b#w@@ @@@I0        @Pe,@A@@б@г !t )#b#{ *#b#|@@ @@@J@@г &option 6#b# 7#b#@г \#elt @#b# A#b#@@ @@@K(@@@@@@M- @@@"@@N0%@@@6@@O39@@@ S#b#f@  [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  _## `$$3@@@@@@@ wd@,@F*find_first/ k$5$= l$5$G@б@б@г #elt x$5$J y$5$M@@ @@@P0 z y y z z z z z@av.@A@@г V$bool $5$Q $5$U@@ @@@Q@@@@@R@@б@г !t $5$Z $5$[@@ @@@S!@@г  #elt $5$_ $5$b@@ @@@T.@@@@@U1@@@$@@V4 $5$I @@@ $5$9@ e  [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  $c$g &2&;@@@@@@@ e@@H.find_first_opt0 &=&E &=&S@б@б@г #elt &=&V &=&Y@@ @@@W0        @cz.@A@@г $bool &=&] &=&a@@ @@@X@@@@@Y@@б@г !t &=&f &=&g@@ @@@Z!@@г |&option &=&o &=&u@г .#elt &=&k &=&n@@ @@@[8@@@@@@]= @@@"@@^@%@@@3@@_C #&=&U@@@ &&=&A@ ֐ [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  2&v&z 3'Y'b@@@@@@@ Jf@-@W)find_last1 > 'd'l ? 'd'u@б@б@г g#elt K 'd'x L 'd'{@@ @@@`0 M L L M M M M M@r.@A@@г )$bool Z 'd' [ 'd'@@ @@@a@@@@@b@@б@г a!t l 'd' m 'd'@@ @@@c!@@г #elt y 'd' z 'd'@@ @@@d.@@@@@e1@@@$@@f4  'd'w @@@  'd'h@ 8 [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   '' (g(p@@@@@@@ g@@H-find_last_opt2 (r(z (r(@б@б@г ɠ#elt (r( (r(@@ @@@g0        @cz.@A@@г $bool (r( (r(@@ @@@h@@@@@i@@б@г à!t (r( (r(@@ @@@j!@@г O&option (r( (r(@г #elt (r( (r(@@ @@@k8@@@@@@m= @@@"@@n@%@@@3@@oC (r(@@@ (r(v@ [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 (())@@@@@@@h@-@W'of_list3))))@б@г $list))))@г B#elt&))'))@@ @@@p0(''(((((@z6@A@@@ @@@r @@г /!t:));))@@ @@@s@@@@@t@@@E)) @ [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.0 Q))R*{*@@@@@@@ii@@*g/ {1 Iterators} b**c**@@@@@@0a``aaaaa@:Y#@A+to_seq_fromon **o **@б@г #elty **z **@@ @@@u@@б@г }!t ** **@@ @@@v)@@г `#Seq!t ** **@г #elt ** **@@ @@@ cC@@@@@@ eH @@@%@@ fK(@@@7@@ gN:@@@ **@ e [to_seq_from x s] iterates on a subset of the elements of [s] in ascending order, from [x] or above. @since 4.07 !**#+P+f@@@@@@@j@,@a&to_seqp%+h+p%+h+v@б@г ͠!t%+h+y%+h+z@@ @@@ h0@zu,@A@@г #Seq!t%+h+%+h+@г #elt%+h+~%+h+@@ @@@ i@@@@@@ k! @@@'@@ l$*@@@%+h+l@ B Iterate on the whole set, in ascending order @since 4.07 &++'++@@@@@@@(k@)@7*to_rev_seqq)++)++@б@г !t')++()++@@ @@@ m0)(()))))@Pe,@A@@г#Seq!t9)++:)++@г _#eltC)++D)++@@ @@@ n@@@@@@ p! @@@'@@ q$*@@@S)++@ C Iterate on the whole set, in descending order @since 4.12 _*++`+,/,E@@@@@@@wl@)@7'add_seqrk-,G,Ol-,G,V@б@гA#Seq!ty-,G,]z-,G,b@г #elt-,G,Y-,G,\@@ @@@ r0@]r9@A@@@ @@@ t @@б@г !t-,G,f-,G,g@@ @@@ u@@г !t-,G,k-,G,l@@ @@@ v#@@@@@ w&@@@&@@ x)/ @@@-,G,K@d B Add the given elements to the set, in order. @since 4.07 .,m,q/,,@@@@@@@m@@<&of_seqs1,,1,,@б@г#Seq!t1,,1,,@г#elt1,,1,,@@ @@@ y0@b9@A@@@ @@@ { @@г !t1,,1,,@@ @@@ |@@@@@ }@@@1,, @ 9 Build a set from the given bindings @since 4.07 2,,3--@@@@@@@'n@@*@5/A@ A@  @  @  W@ C @  @  @ n 5@ ! @  @  N@ : @  @  g@ S @  @  :@ &@z@f@@5@!@@u@a+@@@k@W!@ @b@N@@7@#@h@T@@c@O@@j@@0hgghhhhh@l@A[0kjjkkkkk@w@ApC  q4--"@@! * Output signature of the functor {!Make}. }5-#-#~5-#-R@@@@@@@B  @0~}}~~~~~@@A@$MakeF7-T-[7-T-_@@Т#OrduG7-T-a7-T-d@Рd+OrderedType7-T-g7-T-r@0@A@A@u@a:@& @  @  e@ Q @  @  ~@ j 1@  @  @  J@ 6 @  @  =@ ) @  p@ \ @@A@-@@|F@2 @@@r<@(@@E@1@@<@(@m@Y@@F@2@@M@9@@o@Aba@@УР7!S 7-T-v 7-T-w@0        @m@x@}*p@A  @@9#elt7-T-7-T-@(A@8@@@A!t@@@ @@@@+7-T-},7-T-@@@@Cq@@Aг #Ord 67-T- @@( @@@@[wH8@@@A@@@ @@@@@@@@A@=xH8@@@A@@@@@86@@)A@#y @@@ ?@@z@ @@@ >@@@ =@@ <@@{@(@@@ ;@@@@ :@@@ 9@@ 8@@ 7@@|@@@@ 6@-@@@ 50@@@ 4@@ 3@@ 2@geX@T}@#@@@ 1<@@@ 0@@ /@64'@#~@/@@@ .@J@@@ -M@@@ ,@@ +@@ *@   @ @V@@@ )@[@@@ (^@@@ '@@ &@@ %@   @ @g@@@ $@l@@@ #o@@@ "@@ !@@ @ | z m@ i@x@@@ @}@@@  O@@@ @@ @@ @ > < /@ +@@@@ @@@@ @@@ @@ @@ @   @ @@@@ @@@@  @@@ @@ @@ @   @ @@@@ @@@@  @@@ @@ @@ @   u@ q@@@@ @@@@  W@@@ @@ @@ @ F D 7@ 3@@@@@  #@@@ @@ @@@@  @@@ @@ @@ @   @ @@@@@ @@@ @@ @@@@ @@@ @@ @@ @   @ @@@@@ @  @@ @@ @@@@ @  @@ @@ @@ @ S Q D@ @@@@@@  0@@@ @@ @@@@  @@@ @@ @@ @   @ @@@@@  @@@ @@ @-@@@  @@@ @@ @@ @   @ @@%@@@  @@@ @@ @C@@@ F@@@ @@ @@ @ o m `@ \@@;@@@  LA@@@ @@@ @@ @]@@@ `@@@ @@ @@ @   @ @@U@@@  @@@ @@ @s@@@ y@@@ Ϡ}@@@ @@ @@ @@ @   @ @@@@  @@@ @@ @   }@ y@@@@  i@@@ @@@ @@ @ P N A@ =@@@@ @@@ @@ @   @ @@@@ @@@ @@@ @@ @@@@@@ @@@ @@ @@@@@@ @@@ @@@ @@ @vtg@c@@@@ @@@ @@ @EC6@2@@@@ "@@@ @@@ @@ @ @@@@@ @@@@ @@@ @@@  @@@ @@ @@ @@ @@@@@@ @@@@ @@@ @@ @@ @sqd@`@ @@@ @(@@@ F@@@ @@@ @@ @@ @*(@@@$@@@ @@@ @@ @B@@@ /@@@ @@ @@ @@@@:@@@ @@@ @@ @X@@@ H@@@ @@@ @@ @@ @x@t@@T@@@ d@@@ @@ @r@@@ _@@@ @@ @@ @;9,@(@@j@@@ @@@ @@ @@@@ x@@@ @@@ @@ @@ @@@͠@@@ ~@@@ }@@@ |@@ {@@@@@@ z@@@@ ylk@@@ x@@@ w@@ v@@ u@OM@@<@@@@ t,+@@@ s@@@ r@@ q@@@@@@ p@@@ o@@@ n@@ m@@@@@@ l@@@ k@@@@ j@@@ i@@ h@@ g@|@x@ts@@@ f@@@ e@@@ d@@ c@NL?@@AE%@@0POOPPPPP@@AU7-T-`*@@ Z Functor building an implementation of the set structure given a totally ordered type. a8--b9--@@@@@@@d7-T-T9@:@@/j@m@@ r@@@0onnooooo@@ܑ@?A@98A@76@10@'&@@@@@@@@@@@@rq@^]@LK@87@$#@@@@@@@@@@@}|@cb@TS@A@@-,@@@@@@@@@@{n`@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  J J@ 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************************************************************************#N$N5@ NOTE: If this file is set.mli, do not edit it directly! Instead, edit templates/set.template.mli and run tools/sync_stdlib_docs )P77*Q{@ * 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}. p * The type of the set elements. G4* The type of sets. #1* The empty set.  &* Test whether a set is empty or not.  6* [mem x s] tests whether [x] belongs to the set [s]. s * [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].  * [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. U4* Set intersection.  7* Test if two sets are disjoint. @since 4.08.0  Z* Set difference: [diff s1 s2] contains the elements of [s1] that are not in [s2]. q c* Total ordering between sets. Can be used as the ordering function for doing sets of sets. % h* [equal s1 s2] tests whether the sets [s1] and [s2] are equal, that is, contain equal elements. ٠ P* [subset s1 s2] tests whether the set [s1] is a subset of the set [s2].  * [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. . * [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.0 Ϡ * [fold f s init] computes [(f xN ... (f x2 (f x1 init))...)], where [x1 ... xN] are the elements of [s], in increasing order. c T* [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].  * [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. F * [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.0  ؠ * [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].  c ** Return the number of elements of a set.  ) * 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 {!Stdlib.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  ] O* Same as {!min_elt}, but returns the largest element of the given set.  # l* 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  W n* [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].  栠 * [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.0  * [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  ? * [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 r * [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  * [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.0 \0* {1 Iterators} N * [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  D* Iterate on the whole set, in descending order @since 4.12 Z C* Add the given elements to the set, in order. @since 4.07  :* Build a set from the given bindings @since 4.07  +* Output signature of the functor {!Make}. E [* Functor building an implementation of the set structure given a totally ordered type. d@D)../ocamlc0-strict-sequence(-absname"-w8+a-4-9-41-42-44-45-48-70"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal,-safe-string/-strict-formats"-o/stdlib__Set.cmi"-cԐ 1/home/barsac/ci/builds/workspace/bootstrap/stdlib @0RԵXo_0@@@8CamlinternalFormatBasics0cEXy,W:(.Stdlib__Either0 }rCT0J){9)+Stdlib__Seq0yt\eǟ&Q,}0PSVl8 ;@0PSVl8 ;Aq    @@fe Y Xwv@@@   \ [  SR@@@CB  ư@@0/@   ذ76@ L K@  @ [ Z@  @ ` _.@FE@ % $P@@@~}@@! @`_@@@@@vu@@  @@P@