sig   type t = string list list   class type in_obj_channel =     object       method close_in : unit -> unit       method input : Bytes.t -> int -> int -> int     end   class type out_obj_channel =     object       method close_out : unit -> unit       method output : Bytes.t -> int -> int -> int     end   exception Failure of int * int * string   type in_channel   val of_in_obj :     ?separator:char ->     ?strip:bool ->     ?has_header:bool ->     ?header:string list ->     ?backslash_escape:bool ->     ?excel_tricks:bool -> Csv.in_obj_channel -> Csv.in_channel   val of_channel :     ?separator:char ->     ?strip:bool ->     ?has_header:bool ->     ?header:string list ->     ?backslash_escape:bool ->     ?excel_tricks:bool -> Pervasives.in_channel -> Csv.in_channel   val of_string :     ?separator:char ->     ?strip:bool ->     ?has_header:bool ->     ?header:string list ->     ?backslash_escape:bool -> ?excel_tricks:bool -> string -> Csv.in_channel   val load :     ?separator:char ->     ?strip:bool ->     ?backslash_escape:bool -> ?excel_tricks:bool -> string -> Csv.t   val load_in :     ?separator:char ->     ?strip:bool ->     ?backslash_escape:bool ->     ?excel_tricks:bool -> Pervasives.in_channel -> Csv.t   val to_in_obj : Csv.in_channel -> Csv.in_obj_channel   val close_in : Csv.in_channel -> unit   val next : Csv.in_channel -> string list   val fold_left :     f:('-> string list -> 'a) -> init:'-> Csv.in_channel -> 'a   val fold_right : f:(string list -> '-> 'a) -> Csv.in_channel -> '-> 'a   val iter : f:(string list -> unit) -> Csv.in_channel -> unit   val input_all : Csv.in_channel -> Csv.t   val current_record : Csv.in_channel -> string list   val load_rows :     ?separator:char ->     ?strip:bool ->     ?backslash_escape:bool ->     ?excel_tricks:bool ->     (string list -> unit) -> Pervasives.in_channel -> unit   type out_channel   val to_out_obj :     ?separator:char ->     ?backslash_escape:bool ->     ?excel_tricks:bool -> Csv.out_obj_channel -> Csv.out_channel   val to_channel :     ?separator:char ->     ?backslash_escape:bool ->     ?excel_tricks:bool -> Pervasives.out_channel -> Csv.out_channel   val to_buffer :     ?separator:char ->     ?backslash_escape:bool ->     ?excel_tricks:bool -> Buffer.t -> Csv.out_channel   val output_record : Csv.out_channel -> string list -> unit   val output_all : Csv.out_channel -> Csv.t -> unit   val save_out :     ?separator:char ->     ?backslash_escape:bool ->     ?excel_tricks:bool -> Pervasives.out_channel -> Csv.t -> unit   val save :     ?separator:char ->     ?backslash_escape:bool -> ?excel_tricks:bool -> string -> Csv.t -> unit   val print :     ?separator:char ->     ?backslash_escape:bool -> ?excel_tricks:bool -> Csv.t -> unit   val print_readable : Csv.t -> unit   val save_out_readable : Pervasives.out_channel -> Csv.t -> unit   module Row :     sig       type t       val get : Csv.Row.t -> int -> string       val find : Csv.Row.t -> string -> string       val to_list : Csv.Row.t -> string list       val to_assoc : Csv.Row.t -> (string * string) list       val with_header : Csv.Row.t -> string list -> Csv.Row.t     end   module Rows :     sig       val header : Csv.in_channel -> string list       val next : Csv.in_channel -> Csv.Row.t       val fold_left :         f:('-> Csv.Row.t -> 'a) -> init:'-> Csv.in_channel -> 'a       val fold_right :         f:(Csv.Row.t -> '-> 'a) -> Csv.in_channel -> '-> 'a       val iter : f:(Csv.Row.t -> unit) -> Csv.in_channel -> unit       val input_all : Csv.in_channel -> Csv.Row.t list       val load :         ?separator:char ->         ?strip:bool ->         ?has_header:bool ->         ?header:string list ->         ?backslash_escape:bool ->         ?excel_tricks:bool -> string -> Csv.Row.t list       val current : Csv.in_channel -> Csv.Row.t     end   val lines : Csv.t -> int   val columns : Csv.t -> int   val trim :     ?top:bool -> ?left:bool -> ?right:bool -> ?bottom:bool -> Csv.t -> Csv.t   val square : Csv.t -> Csv.t   val is_square : Csv.t -> bool   val set_columns : cols:int -> Csv.t -> Csv.t   val set_rows : rows:int -> Csv.t -> Csv.t   val set_size : rows:int -> cols:int -> Csv.t -> Csv.t   val sub : r:int -> c:int -> rows:int -> cols:int -> Csv.t -> Csv.t   val compare : Csv.t -> Csv.t -> int   val concat : Csv.t list -> Csv.t   val transpose : Csv.t -> Csv.t   val to_array : Csv.t -> string array array   val of_array : string array array -> Csv.t   val associate : string list -> Csv.t -> (string * string) list list   val map : f:(string -> string) -> Csv.t -> Csv.t end