sig
  module Priority : sig type t = int 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
  type invalid = [ `Invalid ]
  type fail = [ `Fail ]
  type error = [ `Error ]
  type warn = [ `Warn ]
  type notice = [ `Notice ]
  type info = [ `Info ]
  type debug = [ `Debug ]
  type basic =
      [ `Debug | `Error | `Fail | `Info | `Invalid | `Notice | `Warn ]
  type enable = [ `All | `None ]
  type level =
      [ `All
      | `Debug
      | `Error
      | `Fail
      | `Info
      | `Invalid
      | `None
      | `Notice
      | `Warn ]
end