sig
  external zlib_get_version_string : unit -> string
    = "mlzlib_get_version_string"
  type level = int
  val z_no_compression : int
  val z_best_speed : int
  val z_best_compression : int
  val z_default_compression : int
  type strategy =
      [ `DEFAULT_STRATEGY | `FILTERED | `FIXED | `HUFFMAN_ONLY | `RLE ]
  type header = [ `default | `gzip | `raw ]
  type out_deflater
  val deflate_init_out :
    ?level:int ->
    ?strategy:Zlib.strategy ->
    ?header:Zlib.header ->
    (string -> int -> int -> unit) -> Zlib.out_deflater
  val deflate_out : Zlib.out_deflater -> string -> int -> int -> int
  val deflate_output_substring :
    Zlib.out_deflater -> string -> int -> int -> unit
  val deflate_output_string : Zlib.out_deflater -> string -> unit
  val deflate_flush : Zlib.out_deflater -> unit
  val deflate_end_out : Zlib.out_deflater -> unit
  type in_inflater
  val inflate_init_in :
    ?header:[ `auto | `default | `gzip | `raw ] ->
    (bytes -> int -> int -> int) -> Zlib.in_inflater
  val inflate_in : Zlib.in_inflater -> bytes -> int -> int -> int
  val inflate_end_in : Zlib.in_inflater -> unit
  type out_inflater
  val inflate_init_out :
    ?header:[ `auto | `default | `gzip | `raw ] ->
    (string -> int -> int -> unit) -> Zlib.out_inflater
  val inflate_out : Zlib.out_inflater -> string -> int -> int -> int
  val inflate_flush : Zlib.out_inflater -> unit
  val inflate_end_out : Zlib.out_inflater -> unit
  val is_inflated_out : Zlib.out_inflater -> bool
  val crc32_substring : int32 -> string -> int -> int -> int32
  val crc32_string : int32 -> string -> int32
end