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