functor (P : Cf_ordered.Total_T->
  sig
    module Priority : sig type t = P.t val compare : t -> t -> int end
    class virtual ['a] prioritizer :
      object
        method virtual code : '-> Priority.t
        method virtual tag : '-> string
      end
    class ['a] event :
      '#prioritizer ->
      '->
      string ->
      object
        method level : 'a
        method message : string
        method prioritizer : 'a prioritizer
      end
    class virtual ['a] archiver :
      object constraint 'a = '#event method virtual emit : '-> unit end
    class virtual ['a] agent :
      '#prioritizer ->
      '->
      'a list ->
      object
        constraint 'a = ('#event as 'c) #archiver
        val mutable archivers_ : 'a list
        val mutable limit_ : Priority.t
        method enabled : '-> bool
        method private virtual event : '-> string -> 'c
        method private put :
          ''e. '-> ('-> 'e) -> ('d, unit, string, 'e) format4 -> 'd
        method setlimit : '-> unit
      end
  end