functor (GC : Common_types.CoreModuleSig->
  sig
    type t
    val equal : t -> t -> bool
    val hash : t -> int
    val to_string : t -> string
    type group = GC.t
    module Chan_to_group :
      functor (Types : sig type d_t type c_t end->
        sig
          type group_dsc = group
          type transport_dsc = t
          type s_t
          type d_t = Types.d_t
          type c_t = Types.c_t
          val init : d_t Lazy.t Lazy.t -> c_t Lazy.t Lazy.t -> s_t Lazy.t
          type dsc = s_t * d_t * c_t
          type msg = transport_dsc Request_types.Transport_to_group.message
          type req =
              transport_dsc Request_types.Transport_to_group.send_request
          module Make :
            functor
              (ToChannel : sig
                             type to_chan = dsc
                             type send_req = req
                             val send_request : to_chan -> send_req -> unit
                           end->
              sig
                type src = ToChannel.to_chan
                type req = ToChannel.send_req
                type m = msg
                val start : src -> unit
                val retrieve_message : src -> req -> m
              end
        end
    module Chan_from_group :
      functor (Types : sig type s_t type c_t end->
        sig
          type group_dsc = group
          type transport_dsc = t
          type s_t = Types.s_t
          type d_t
          type c_t = Types.c_t
          val init : s_t Lazy.t Lazy.t -> c_t Lazy.t Lazy.t -> d_t Lazy.t
          type dsc = s_t * d_t * c_t
          type msg = transport_dsc Request_types.Group_to_transport.message
          type req =
              transport_dsc Request_types.Group_to_transport.receive_request
          module Make :
            functor
              (FromChannel : sig
                               type from_chan = dsc
                               type receive_req = req
                               val receive_request :
                                 from_chan -> receive_req -> unit
                             end->
              sig
                type dest = dsc
                type req = FromChannel.receive_req
                type m = msg
                val start : dest -> unit
                val process_message : dest -> req -> m -> unit
              end
        end
  end