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