functor (Name : sig val module_name : string end->
  functor
    (Types : sig
               type send_request
               type receive_request = send_request list
               val to_string : send_request -> string
             end->
    sig
      module Set :
        sig
          type elt = Types.send_request
          type t =
              Generic_request_handler.MakeNamedRequest(Name)(Types).Set.t
          val empty : t
          val is_empty : t -> bool
          val mem : t -> elt -> bool
          val add : t -> elt -> t
          val singleton : elt -> t
          val remove : t -> elt -> t
          val cardinal : t -> int
          val union : t -> t -> t
          val intersectp : t -> t -> bool
          val iter : (elt -> unit) -> t -> unit
          val mem_filt : t -> elt list -> elt list
          val fst_mem_filt : t -> (elt * 'a) list -> (elt * 'a) list
          val not_mem_filt : t -> elt list -> elt list
          val of_sorted_list : elt list -> t
          val of_list : elt list -> t
          val to_list : t -> elt list
          val elements : t -> elt list
          val inter : t -> t -> t
          val diff : t -> t -> t
          val compare : t -> t -> int
          val equal : t -> t -> bool
          val subset : t -> t -> bool
          val is_subset : t -> t -> bool
          val fold : ('-> elt -> 'a) -> '-> t -> 'a
          val range_fold : (elt -> int) -> ('-> elt -> 'a) -> '-> t -> 'a
          val for_all : (elt -> bool) -> t -> bool
          val exists : (elt -> bool) -> t -> bool
          val filter : (elt -> bool) -> t -> t
          val partition : (elt -> bool) -> t -> t * t
          val min_elt : t -> elt
          val max_elt : t -> elt
          val choose : t -> elt
          val add_list : t -> elt list -> t
          val subtract_list : t -> elt list -> t
        end
      type req = Set.t * Set.t * Set.t
      type send_req = Types.send_request
      type receive_req = Types.receive_request
      val empty : Set.t * Set.t * Set.t
      val merge_send_request :
        Set.t * Set.t * Set.t -> Set.elt -> Set.t * Set.t * Set.t
      val merge_receive_request :
        Set.t * Set.t * Set.t -> Set.elt list -> Set.t * Set.t * Set.t
      val match_requests :
        Set.t * Set.t * Set.t ->
        (Set.elt * Set.elt list) option * (Set.t * Set.t * Set.t)
    end