(* * Copyright (c) 2014-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. *) val open_in : string -> in_channel val open_out : string -> out_channel val string_starts_with : string -> string -> bool val string_ends_with : string -> string -> bool val string_split : char -> string -> string list val string_join : char -> string list -> string val list_starts_with : 'a list -> 'a list -> bool val list_ends_with : 'a list -> 'a list -> bool val make_cached : ('a -> 'b) -> 'a -> 'b val line_stream_of_channel : in_channel -> string Stream.t val stream_concat : 'a Stream.t Stream.t -> 'a Stream.t val stream_append : 'a Stream.t -> 'a Stream.t -> 'a Stream.t val stream_map : ('a -> 'b) -> 'a Stream.t -> 'b Stream.t val stream_filter : ('a -> bool) -> 'a Stream.t -> 'a Stream.t val stream_fold : ('a -> 'b -> 'b) -> 'b -> 'a Stream.t -> 'b val stream_to_list : 'a Stream.t -> 'a list val assert_true : string -> bool -> unit val assert_false : string -> bool -> unit val assert_equal : string -> 'a -> 'a -> unit module DisjointSet : sig type 'a t val create : unit -> 'a t val find : 'a t -> 'a -> 'a val union : 'a t -> 'a -> 'a -> unit val iter : 'a t -> ('a -> 'a -> unit) -> unit end val fix_arg_spec : (Arg.key * Arg.spec * Arg.doc) list -> Arg.usage_msg -> (Arg.key * Arg.spec * Arg.doc) list