sig
  type error =
      E_task_not_supported
    | E_unexpected_message
    | E_ill_formed_message
    | E_message_too_long
    | E_disconnected
    | E_invalid_print_destination
  exception Error of Procord_protocol.error
  val error : Procord_protocol.error -> 'a
  val error_message : Procord_protocol.error -> string
  type custom_destination = char
  type print_destination =
      D_stdout
    | D_stderr
    | D_custom of Procord_protocol.custom_destination
  type message =
      M_none
    | M_value of string
    | M_task_name of string
    | M_exception of string
    | M_unknown_exception of string
    | M_error of Procord_protocol.error
    | M_print of Procord_protocol.print_destination * string
    | M_flush of Procord_protocol.print_destination
  val set_max_message_size : int -> unit
  val send : 'Procord_connection.t -> Procord_protocol.message -> unit
  val send_value : 'Procord_connection.t -> string -> unit
  val send_task_name : 'Procord_connection.t -> string -> unit
  val send_exception : 'Procord_connection.t -> string -> unit
  val send_unknown_exception : 'Procord_connection.t -> string -> unit
  val send_error : 'Procord_connection.t -> Procord_protocol.error -> unit
  val send_print :
    'Procord_connection.t ->
    Procord_protocol.print_destination -> string -> unit
  val send_flush :
    'Procord_connection.t -> Procord_protocol.print_destination -> unit
  val receive : 'Procord_connection.t -> Procord_protocol.message
  val blocking_receive : 'Procord_connection.t -> Procord_protocol.message
  val blocking_receive_task_name : 'Procord_connection.t -> string
  val blocking_receive_value : 'Procord_connection.t -> string
  val register_destination :
    Procord_protocol.custom_destination -> Format.formatter -> unit
  val formatter_of_destination :
    Procord_protocol.print_destination -> Format.formatter option
end