sig
  module type IO =
    sig
      type 'a t
      val ( >>= ) :
        'Irc_transport.IO.t ->
        ('-> 'Irc_transport.IO.t) -> 'Irc_transport.IO.t
      val return : '-> 'Irc_transport.IO.t
      type file_descr
      type inet_addr
      type config
      val open_socket :
        ?config:Irc_transport.IO.config ->
        Irc_transport.IO.inet_addr ->
        int -> Irc_transport.IO.file_descr Irc_transport.IO.t
      val close_socket :
        Irc_transport.IO.file_descr -> unit Irc_transport.IO.t
      val read :
        Irc_transport.IO.file_descr ->
        Bytes.t -> int -> int -> int Irc_transport.IO.t
      val write :
        Irc_transport.IO.file_descr ->
        Bytes.t -> int -> int -> int Irc_transport.IO.t
      val read_with_timeout :
        timeout:int ->
        Irc_transport.IO.file_descr ->
        Bytes.t -> int -> int -> int option Irc_transport.IO.t
      val gethostbyname :
        string -> Irc_transport.IO.inet_addr list Irc_transport.IO.t
      val iter :
        ('-> unit Irc_transport.IO.t) -> 'a list -> unit Irc_transport.IO.t
      val sleep : int -> unit Irc_transport.IO.t
      val pick : ('Irc_transport.IO.t list -> 'Irc_transport.IO.t) option
    end
end