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