`sig
type t = BatSubstring.t
val empty : unit -> t
val to_string : t -> string
val of_string : string -> t
val make : int -> char -> t
val create : int -> t
val equal : t -> t -> bool
val of_input : BatIO.input -> t
val substring : string -> int -> int -> t
val unsafe_substring : string -> int -> int -> t
val extract : string -> int -> int option -> t
val all : string -> t
val base : t -> string * int * int
val is_empty : t -> bool
val getc : t -> (char * t) option
val first : t -> char option
val triml : int -> t -> t
val trimr : int -> t -> t
val get : t -> int -> char
val size : t -> int
val length : t -> int
val slice : t -> int -> int option -> t
val concat : t list -> string
val explode : t -> char list
val is_prefix : string -> t -> bool
val compare : t -> t -> int
val index : t -> char -> int
val index_from : t -> int -> char -> int
val rindex : t -> char -> int
val rindex_from : t -> int -> char -> int
val contains : t -> char -> bool
val dropl : (char -> bool) -> t -> t
val dropr : (char -> bool) -> t -> t
val takel : (char -> bool) -> t -> t
val taker : (char -> bool) -> t -> t
val splitl : (char -> bool) -> t -> t * t
val splitr : (char -> bool) -> t -> t * t
val split_at : int -> t -> t * t
val span : t -> t -> t
val translate : (char -> char) -> t -> string
val tokens : (char -> bool) -> t -> t list
val fields : (char -> bool) -> t -> t list
val fold_left : ('a -> char -> 'a) -> 'a -> t -> 'a
val fold_right : (char -> 'a -> 'a) -> t -> 'a -> 'a
val iter : (char -> unit) -> t -> unit
val iteri : (int -> char -> unit) -> t -> unit
val trim : t -> t
val split_on_char : char -> t -> t list
val split_on_pipe : t -> t list
val split_on_dot : t -> t list
val split_on_comma : t -> t list
val split_on_slash : t -> t list
val enum : t -> char BatEnum.t
val print : 'a BatIO.output -> t -> unit
end`