sig
  exception Not_activated
  class signaller :
    object
      method lock : unit -> unit
      method signal : unit -> unit
      method unlock : unit -> unit
      method wait : unit -> unit
    end
  class virtual transport_invoker : object method virtual queued : bool end
  class ['a, 'b] transport :
    Compartment.signaller * 'Queue.t * 'Queue.t ->
    object
      method get_invoker : Compartment.transport_invoker
      method pop : 'a
      method popall : 'a list
      method push : '-> unit
      method pushlist : 'b list -> unit
      method queued : bool
    end
  class ['a, 'b] duplex :
    Compartment.signaller ->
    object
      method side1 : ('a, 'b) Compartment.transport
      method side2 : ('b, 'a) Compartment.transport
    end
  class virtual t :
    Compartment.transport_invoker list ->
    object
      method virtual activate : unit
      method virtual deactivate : unit
      method get_runcond : unit -> bool
      method virtual runpass : unit -> unit
      method set_runcond : bool -> unit
    end
  class master :
    Compartment.t list ->
    object
      method activate : unit
      method deactivate : unit
      method get_combined_runcond : unit -> bool
      method orderly_run : unit -> bool
    end
end