sig
  type ('a, 'b) worker_task
  val make_worker_task :
    ?read_input:(string -> 'a) ->
    ?write_output:('-> string) ->
    ?write_exception:(exn -> string) ->
    string -> ('-> 'b) -> ('a, 'b) Procord_task.worker_task
  val read_input : ('a, 'b) Procord_task.worker_task -> string -> 'a
  val write_output : ('a, 'b) Procord_task.worker_task -> '-> string
  val write_exception : ('a, 'b) Procord_task.worker_task -> exn -> string
  val run : ('a, 'b) Procord_task.worker_task -> '-> 'b
  val worker_task_name : ('a, 'b) Procord_task.worker_task -> string
  type ('a, 'b) delegated_task
  val make_delegated_task :
    ?write_input:('-> string) ->
    ?read_output:(string -> 'b) ->
    ?read_exception:(string -> exn) ->
    string -> ('a, 'b) Procord_task.delegated_task
  val write_input : ('a, 'b) Procord_task.delegated_task -> '-> string
  val read_output : ('a, 'b) Procord_task.delegated_task -> string -> 'b
  val read_exception :
    ('a, 'b) Procord_task.delegated_task -> (string -> exn) option
  val delegated_task_name : ('a, 'b) Procord_task.delegated_task -> string
  val make :
    ?read_input:(string -> 'a) ->
    ?write_input:('-> string) ->
    ?read_output:(string -> 'b) ->
    ?write_output:('-> string) ->
    ?read_exception:(string -> exn) ->
    ?write_exception:(exn -> string) ->
    string ->
    ('-> 'b) ->
    ('a, 'b) Procord_task.worker_task * ('a, 'b) Procord_task.delegated_task
end