sig
  type t = {
    access_flags : AccessFlag.for_module list;
    name : Name.for_module;
    attributes : Attribute.for_module list;
  }
  val equal : ModuleDefinition.t -> ModuleDefinition.t -> bool
  val compare : ModuleDefinition.t -> ModuleDefinition.t -> int
  val hash : ModuleDefinition.t -> int
  type error =
      Invalid_module_name
    | Too_many of string
    | Version_error of Version.error
    | Invalid_module_definition
  exception Exception of ModuleDefinition.error
  val string_of_error : ModuleDefinition.error -> string
  val decode : ClassFile.t -> ModuleDefinition.t
  val encode : ?version:Version.t -> ModuleDefinition.t -> ClassFile.t
end