functor (GC : CoreModuleSig->
  sig
    type group = GC.t
    module Chan_to_group :
      functor (Types : sig type d_t type c_t end->
        sig
          type group_dsc = group
          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 = group_dsc Request_types.Application_to_rcomm.message
          type req =
              group_dsc Request_types.Application_to_rcomm.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 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 = group_dsc Request_types.Rcomm_to_application.message
          type req =
              group_dsc Request_types.Rcomm_to_application.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