sig
  type t = {
    access_flags : AccessFlag.for_class list;
    name : Name.for_class;
    extends : Name.for_class option;
    implements : Name.for_class list;
    fields : Field.t list;
    methods : Method.t list;
    attributes : Attribute.for_class list;
  }
  val equal : ClassDefinition.t -> ClassDefinition.t -> bool
  val compare : ClassDefinition.t -> ClassDefinition.t -> int
  val hash : ClassDefinition.t -> int
  type error =
      Invalid_class_name
    | Bootstrap_methods_defined_twice
    | Too_many of string
    | Version_error of Version.error
  exception Exception of ClassDefinition.error
  val string_of_error : ClassDefinition.error -> string
  val map :
    ClassTraversal.class_definition_mapper ->
    ClassDefinition.t -> ClassDefinition.t
  val iter :
    ClassTraversal.class_definition_iterator -> ClassDefinition.t -> unit
  val fold :
    ClassTraversal.class_definition_folder ->
    ClassDefinition.t -> ClassTraversal.class_definition_folder
  val decode : ClassFile.t -> ClassDefinition.t
  val encode : ?version:Version.t -> ClassDefinition.t -> ClassFile.t
end