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