sig
  type native_obj_config = { flambda : bool; }
  val native_obj_config : Misc.Magic_number.native_obj_config
  type version = int
  type kind =
      Exec
    | Cmi
    | Cmo
    | Cma
    | Cmx of Misc.Magic_number.native_obj_config
    | Cmxa of Misc.Magic_number.native_obj_config
    | Cmxs
    | Cmt
    | Ast_impl
    | Ast_intf
  type info = {
    kind : Misc.Magic_number.kind;
    version : Misc.Magic_number.version;
  }
  type raw = string
  type parse_error = Truncated of string | Not_a_magic_number of string
  val explain_parse_error :
    Misc.Magic_number.kind option -> Misc.Magic_number.parse_error -> string
  val parse :
    Misc.Magic_number.raw ->
    (Misc.Magic_number.info, Misc.Magic_number.parse_error) Stdlib.result
  val read_info :
    Stdlib.in_channel ->
    (Misc.Magic_number.info, Misc.Magic_number.parse_error) Stdlib.result
  val magic_length : int
  type 'a unexpected = { expected : 'a; actual : 'a; }
  type unexpected_error =
      Kind of Misc.Magic_number.kind Misc.Magic_number.unexpected
    | Version of Misc.Magic_number.kind *
        Misc.Magic_number.version Misc.Magic_number.unexpected
  val check_current :
    Misc.Magic_number.kind ->
    Misc.Magic_number.info ->
    (unit, Misc.Magic_number.unexpected_error) Stdlib.result
  val explain_unexpected_error : Misc.Magic_number.unexpected_error -> string
  type error =
      Parse_error of Misc.Magic_number.parse_error
    | Unexpected_error of Misc.Magic_number.unexpected_error
  val read_current_info :
    expected_kind:Misc.Magic_number.kind option ->
    Stdlib.in_channel ->
    (Misc.Magic_number.info, Misc.Magic_number.error) Stdlib.result
  val string_of_kind : Misc.Magic_number.kind -> string
  val human_name_of_kind : Misc.Magic_number.kind -> string
  val current_raw : Misc.Magic_number.kind -> Misc.Magic_number.raw
  val current_version : Misc.Magic_number.kind -> Misc.Magic_number.version
  type raw_kind = string
  val parse_kind :
    Misc.Magic_number.raw_kind -> Misc.Magic_number.kind option
  val raw_kind : Misc.Magic_number.kind -> Misc.Magic_number.raw_kind
  val raw : Misc.Magic_number.info -> Misc.Magic_number.raw
  val all_kinds : Misc.Magic_number.kind list
end