sig
  module type IO =
    sig
      type 'a t
      val ( >>= ) :
        'a Irc_transport.IO.t ->
        ('a -> 'b Irc_transport.IO.t) -> 'b Irc_transport.IO.t
      val return : 'a -> 'a 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 :
        ('a -> unit Irc_transport.IO.t) -> 'a list -> unit Irc_transport.IO.t
      val sleep : int -> unit Irc_transport.IO.t
      val pick : ('a Irc_transport.IO.t list -> 'a Irc_transport.IO.t) option
    end
end