sig
  type info = {
    access_flags : Utils.u2;
    name_index : Utils.u2;
    descriptor_index : Utils.u2;
    attributes_count : Utils.u2;
    attributes_array : Attribute.info array;
  }
  type error =
      Invalid_name of Utils.UTF8.t
    | Invalid_name_value of Utils.u2
    | Invalid_descriptor_value of Utils.u2
  exception Exception of Field.error
  val string_of_error : Field.error -> string
  val read_info : InputStream.t -> Field.info
  val write_info : OutputStream.t -> Field.info -> unit
  type t = {
    flags : AccessFlag.for_field list;
    name : Name.for_field;
    descriptor : Descriptor.for_field;
    attributes : Attribute.for_field list;
  }
  val equal : Field.t -> Field.t -> bool
  val compare : Field.t -> Field.t -> int
  val hash : Field.t -> int
  val compare_according_to_visibility : Field.t -> Field.t -> int
  val decode : bool -> ConstantPool.t -> Field.info -> Field.t
  val encode : ConstantPool.extendable -> Field.t -> Field.info
end