functor (S : MINIMALISTIC_MUTABLE_STRING->   sig     type character = S.character     type t = S.t     val empty : t     val is_empty : t -> bool     val make : int -> character -> t     val length : t -> int     val of_character : character -> t     val of_character_list : character list -> t     val to_character_list : t -> character list     val get : t -> index:int -> character option     val set : t -> index:int -> v:character -> t option     val get_exn : t -> index:int -> character     val set_exn : t -> index:int -> v:character -> t     val concat : ?sep:t -> t list -> t     val of_native_string : string -> (t, [> `wrong_char_at of int ]) result     val of_native_substring :       string ->       offset:int ->       length:int -> (t, [> `out_of_bounds | `wrong_char_at of int ]) result     val to_native_string : t -> string     val to_string_hum : t -> string     val fold : t -> init:'-> f:('-> character -> 'a) -> 'a     val foldi : t -> init:'-> f:(int -> '-> character -> 'a) -> 'a     val fold2_exn :       t -> t -> init:'-> f:('-> character -> character -> 'a) -> 'a     val compare : t -> t -> int     val sub : t -> index:int -> length:int -> t option     val sub_exn : t -> index:int -> length:int -> t     val slice : ?start:int -> ?finish:int -> t -> t option     val slice_exn : ?start:int -> ?finish:int -> t -> t     val is_prefix : t -> prefix:t -> bool     val is_suffix : t -> suffix:t -> bool     val chop_prefix_exn : t -> prefix:t -> t     val chop_prefix : t -> prefix:t -> t option     val chop_suffix_exn : t -> suffix:t -> t     val chop_suffix : t -> suffix:t -> t option     val split_at : t -> index:int -> t * t     val take : t -> index:int -> t     val drop : t -> index:int -> t     val compare_substring : t * int * int -> t * int * int -> int     val compare_substring_strict :       t * int * int -> t * int * int -> int option     val iter : t -> f:(character -> unit) -> unit     val iteri : t -> f:(int -> character -> unit) -> unit     val iter_reverse : t -> f:(character -> unit) -> unit     val rev : t -> t     val map : t -> f:(character -> character) -> t     val mapi : t -> f:(int -> character -> character) -> t     val map2_exn : t -> t -> f:(character -> character -> character) -> t     val for_all : t -> f:(character -> bool) -> bool     val exists : t -> f:(character -> bool) -> bool     val take_while : t -> f:(character -> bool) -> t     val take_while_with_index : t -> f:(int -> character -> bool) -> t     val index_of_character : t -> ?from:int -> character -> int option     val index_of_character_reverse :       t -> ?from:int -> character -> int option     val index_of_string :       ?from:int ->       ?sub_index:int -> ?sub_length:int -> t -> sub:t -> int option     val index_of_string_reverse :       ?from:int ->       ?sub_index:int -> ?sub_length:int -> t -> sub:t -> int option     val find :       ?from:int -> ?length:int -> t -> f:(character -> bool) -> int option     val find_reverse :       ?from:int -> ?length:int -> t -> f:(character -> bool) -> int option     val filter_map :       ?from:int -> ?length:int -> t -> f:(character -> character option) -> t     val filter : ?from:int -> ?length:int -> t -> f:(character -> bool) -> t     val split : t -> on:[ `Character of character | `String of t ] -> t list     val strip :       ?on:[ `Both | `Left | `Right ] ->       ?whitespace:(character -> bool) -> t -> t     module Make_output :       functor (Model : OUTPUT_MODEL->         sig           val output :             ('a, 'b, 'c) Model.channel -> t -> (unit, 'e, 'f) Model.thread         end   end