sig
  type ('a, 'b) handler = {
    scheduler : 'Duppy.scheduler;
    socket : Unix.file_descr;
    mutable data : string;
    on_error : Duppy.Io.failure -> 'b;
  }
  val exec :
    ?delay:float ->
    priority:'->
    ('a, 'b) Duppy.Monad.Io.handler ->
    ('c, 'b) Duppy.Monad.t -> ('c, 'b) Duppy.Monad.t
  val delay :
    priority:'->
    ('a, 'b) Duppy.Monad.Io.handler -> float -> (unit, 'b) Duppy.Monad.t
  val read :
    ?timeout:float ->
    priority:'->
    marker:Duppy.Io.marker ->
    ('a, 'b) Duppy.Monad.Io.handler -> (string, 'b) Duppy.Monad.t
  val read_all :
    ?timeout:float ->
    priority:'->
    'Duppy.scheduler ->
    Unix.file_descr -> (string, string * Duppy.Io.failure) Duppy.Monad.t
  val write :
    ?timeout:float ->
    priority:'->
    ('a, 'b) Duppy.Monad.Io.handler -> string -> (unit, 'b) Duppy.Monad.t
  val write_bigarray :
    ?timeout:float ->
    priority:'->
    ('a, 'b) Duppy.Monad.Io.handler ->
    Duppy.Io.bigarray -> (unit, 'b) Duppy.Monad.t
end