sig
  type t = string list list
  class type in_obj_channel =
    object
      method close_in : unit -> unit
      method input : string -> int -> int -> int
    end
  class type out_obj_channel =
    object
      method close_out : unit -> unit
      method output : string -> int -> int -> int
    end
  exception Failure of int * int * string
  type in_channel
  val of_in_obj :
    ?separator:char ->
    ?excel_tricks:bool -> Csv.in_obj_channel -> Csv.in_channel
  val of_channel :
    ?separator:char ->
    ?excel_tricks:bool -> Pervasives.in_channel -> Csv.in_channel
  val of_string :
    ?separator:char -> ?excel_tricks:bool -> string -> Csv.in_channel
  val load : ?separator:char -> ?excel_tricks:bool -> string -> Csv.t
  val load_in :
    ?separator:char -> ?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 : ('-> string list -> 'a) -> '-> Csv.in_channel -> 'a
  val fold_right : (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 ->
    ?excel_tricks:bool ->
    (string list -> unit) -> Pervasives.in_channel -> unit
  type out_channel
  val to_out_obj :
    ?separator:char ->
    ?excel_tricks:bool -> Csv.out_obj_channel -> Csv.out_channel
  val to_channel :
    ?separator:char ->
    ?excel_tricks:bool -> Pervasives.out_channel -> 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 ->
    ?excel_tricks:bool -> Pervasives.out_channel -> Csv.t -> unit
  val save : ?separator:char -> ?excel_tricks:bool -> string -> Csv.t -> unit
  val print : ?separator:char -> ?excel_tricks:bool -> Csv.t -> unit
  val print_readable : Csv.t -> unit
  val save_out_readable : Pervasives.out_channel -> Csv.t -> unit
  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 : int -> Csv.t -> Csv.t
  val set_rows : int -> Csv.t -> Csv.t
  val set_size : int -> int -> Csv.t -> Csv.t
  val sub : int -> int -> int -> 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
end