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