functor
  (Model : sig val name : string type query type response type error end->
  sig
    module Register :
      functor
        (Version_i : sig
                       val version : int
                       type query
                       type response
                       type error
                       val model_of_query :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query ->
                         Model.query
                       val response_of_model :
                         Model.response ->
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                       val bin_query :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                         Core.Std.Bin_prot.Type_class.t
                       val bin_read_query :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                         Core.Std.Bin_prot.Read_ml.reader
                       val bin_read_query_ :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                         Core.Std.Bin_prot.Unsafe_read_c.reader
                       val bin_read_query__ :
                         (int ->
                          Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query)
                         Core.Std.Bin_prot.Unsafe_read_c.reader
                       val bin_reader_query :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                         Core.Std.Bin_prot.Type_class.reader
                       val bin_size_query :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                         Core.Std.Bin_prot.Size.sizer
                       val bin_write_query :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                         Core.Std.Bin_prot.Write_ml.writer
                       val bin_write_query_ :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                         Core.Std.Bin_prot.Unsafe_write_c.writer
                       val bin_writer_query :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.query
                         Core.Std.Bin_prot.Type_class.writer
                       val bin_response :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                         Core.Std.Bin_prot.Type_class.t
                       val bin_read_response :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                         Core.Std.Bin_prot.Read_ml.reader
                       val bin_read_response_ :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                         Core.Std.Bin_prot.Unsafe_read_c.reader
                       val bin_read_response__ :
                         (int ->
                          Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response)
                         Core.Std.Bin_prot.Unsafe_read_c.reader
                       val bin_reader_response :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                         Core.Std.Bin_prot.Type_class.reader
                       val bin_size_response :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                         Core.Std.Bin_prot.Size.sizer
                       val bin_write_response :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                         Core.Std.Bin_prot.Write_ml.writer
                       val bin_write_response_ :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                         Core.Std.Bin_prot.Unsafe_write_c.writer
                       val bin_writer_response :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.response
                         Core.Std.Bin_prot.Type_class.writer
                       val bin_error :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                         Core.Std.Bin_prot.Type_class.t
                       val bin_read_error :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                         Core.Std.Bin_prot.Read_ml.reader
                       val bin_read_error_ :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                         Core.Std.Bin_prot.Unsafe_read_c.reader
                       val bin_read_error__ :
                         (int ->
                          Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error)
                         Core.Std.Bin_prot.Unsafe_read_c.reader
                       val bin_reader_error :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                         Core.Std.Bin_prot.Type_class.reader
                       val bin_size_error :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                         Core.Std.Bin_prot.Size.sizer
                       val bin_write_error :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                         Core.Std.Bin_prot.Write_ml.writer
                       val bin_write_error_ :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                         Core.Std.Bin_prot.Unsafe_write_c.writer
                       val bin_writer_error :
                         Versioned_rpc.Callee_converts.Pipe_rpc.Make.Register.error
                         Core.Std.Bin_prot.Type_class.writer
                     end->
        sig
          val rpc :
            (Version_i.query, Version_i.response, Version_i.error)
            Rpc.Pipe_rpc.t
        end
    val implement_multi :
      ?log_not_previously_seen_version:(name:string -> int -> unit) ->
      ('state ->
       Model.query ->
       aborted:unit Import.Deferred.t ->
       Model.response Import.Pipe.Reader.t Import.Deferred.t) ->
      'state Rpc.Implementation.t list
    val versions : unit -> Core.Std.Int.Set.t
  end