sig
  type t = int
  val zero : int
  val one : int
  val minus_one : int
  external neg : int -> int = "%negint"
  external add : int -> int -> int = "%addint"
  external ( + ) : int -> int -> int = "%addint"
  external sub : int -> int -> int = "%subint"
  external ( - ) : int -> int -> int = "%subint"
  external mul : int -> int -> int = "%mulint"
  external ( * ) : int -> int -> int = "%mulint"
  external div : int -> int -> int = "%divint"
  external ( / ) : int -> int -> int = "%divint"
  external rem : int -> int -> int = "%modint"
  external modulo : int -> int -> int = "%modint"
  val pow : int -> int -> int
  val ( ** ) : int -> int -> int
  val ( <> ) : int -> int -> bool
  val ( > ) : int -> int -> bool
  val ( < ) : int -> int -> bool
  val ( >= ) : int -> int -> bool
  val ( <= ) : int -> int -> bool
  val ( = ) : int -> int -> bool
  val min_num : int
  val max_num : int
  external succ : int -> int = "%succint"
  external pred : int -> int = "%predint"
  val abs : int -> int
  external of_float : float -> int = "%intoffloat"
  external to_float : int -> float = "%floatofint"
  val of_string : string -> int
  val to_string : int -> string
  val min : int -> int -> int
  val max : int -> int -> int
  val mid : int -> int -> int
  val popcount : int -> int
  val copysign : int -> int -> int
  val popcount_sparse : int -> int
  val operations : int BatNumber.numeric
  val ( -- ) : BatInt.t -> BatInt.t -> BatInt.t BatEnum.t
  val ( --- ) : BatInt.t -> BatInt.t -> BatInt.t BatEnum.t
  external of_int : int -> int = "%identity"
  external to_int : int -> int = "%identity"
  module Infix :
    sig
      type bat__infix_t = t
      val ( + ) : bat__infix_t -> bat__infix_t -> bat__infix_t
      val ( - ) : bat__infix_t -> bat__infix_t -> bat__infix_t
      val ( * ) : bat__infix_t -> bat__infix_t -> bat__infix_t
      val ( / ) : bat__infix_t -> bat__infix_t -> bat__infix_t
      val ( ** ) : bat__infix_t -> bat__infix_t -> bat__infix_t
      val ( -- ) : bat__infix_t -> bat__infix_t -> bat__infix_t BatEnum.t
      val ( --- ) : bat__infix_t -> bat__infix_t -> bat__infix_t BatEnum.t
    end
  module Compare :
    sig
      type bat__compare_t = t
      val ( <> ) : bat__compare_t -> bat__compare_t -> bool
      val ( >= ) : bat__compare_t -> bat__compare_t -> bool
      val ( <= ) : bat__compare_t -> bat__compare_t -> bool
      val ( > ) : bat__compare_t -> bat__compare_t -> bool
      val ( < ) : bat__compare_t -> bat__compare_t -> bool
      val ( = ) : bat__compare_t -> bat__compare_t -> bool
    end
  val print : 'BatInnerIO.output -> int -> unit
  val print_hex : 'BatInnerIO.output -> int -> unit
  val compare : BatInt.t -> BatInt.t -> int
  val equal : BatInt.t -> BatInt.t -> bool
  val ord : BatInt.t -> BatInt.t -> BatOrd.order
  module Safe_int :
    sig
      type t = int
      val zero : BatInt.Safe_int.t
      val one : BatInt.Safe_int.t
      val minus_one : BatInt.Safe_int.t
      val neg : BatInt.Safe_int.t -> BatInt.Safe_int.t
      val add : BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatInt.Safe_int.t
      val ( + ) : BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatInt.Safe_int.t
      val sub : BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatInt.Safe_int.t
      val ( - ) : BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatInt.Safe_int.t
      val mul : BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatInt.Safe_int.t
      val ( * ) : BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatInt.Safe_int.t
      external div :
        BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatInt.Safe_int.t
        = "%divint"
      external ( / ) :
        BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatInt.Safe_int.t
        = "%divint"
      external rem :
        BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatInt.Safe_int.t
        = "%modint"
      external modulo :
        BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatInt.Safe_int.t
        = "%modint"
      val pow : BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatInt.Safe_int.t
      val ( ** ) :
        BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatInt.Safe_int.t
      val ( <> ) : BatInt.Safe_int.t -> BatInt.Safe_int.t -> bool
      val ( > ) : BatInt.Safe_int.t -> BatInt.Safe_int.t -> bool
      val ( < ) : BatInt.Safe_int.t -> BatInt.Safe_int.t -> bool
      val ( >= ) : BatInt.Safe_int.t -> BatInt.Safe_int.t -> bool
      val ( <= ) : BatInt.Safe_int.t -> BatInt.Safe_int.t -> bool
      val ( = ) : BatInt.Safe_int.t -> BatInt.Safe_int.t -> bool
      val max_num : BatInt.Safe_int.t
      val min_num : BatInt.Safe_int.t
      val succ : BatInt.Safe_int.t -> BatInt.Safe_int.t
      val pred : BatInt.Safe_int.t -> BatInt.Safe_int.t
      val abs : BatInt.Safe_int.t -> BatInt.Safe_int.t
      external of_float : float -> BatInt.Safe_int.t = "%intoffloat"
      external to_float : BatInt.Safe_int.t -> float = "%floatofint"
      val of_string : string -> BatInt.Safe_int.t
      val to_string : BatInt.Safe_int.t -> string
      val operations : BatInt.Safe_int.t BatNumber.numeric
      external of_int : int -> BatInt.Safe_int.t = "%identity"
      external to_int : BatInt.Safe_int.t -> int = "%identity"
      module Infix :
        sig
          type bat__infix_t = t
          val ( + ) : bat__infix_t -> bat__infix_t -> bat__infix_t
          val ( - ) : bat__infix_t -> bat__infix_t -> bat__infix_t
          val ( * ) : bat__infix_t -> bat__infix_t -> bat__infix_t
          val ( / ) : bat__infix_t -> bat__infix_t -> bat__infix_t
          val ( ** ) : bat__infix_t -> bat__infix_t -> bat__infix_t
          val ( -- ) : bat__infix_t -> bat__infix_t -> bat__infix_t BatEnum.t
          val ( --- ) :
            bat__infix_t -> bat__infix_t -> bat__infix_t BatEnum.t
        end
      module Compare :
        sig
          type bat__compare_t = t
          val ( <> ) : bat__compare_t -> bat__compare_t -> bool
          val ( >= ) : bat__compare_t -> bat__compare_t -> bool
          val ( <= ) : bat__compare_t -> bat__compare_t -> bool
          val ( > ) : bat__compare_t -> bat__compare_t -> bool
          val ( < ) : bat__compare_t -> bat__compare_t -> bool
          val ( = ) : bat__compare_t -> bat__compare_t -> bool
        end
      val print : 'BatInnerIO.output -> BatInt.Safe_int.t -> unit
      val compare : BatInt.Safe_int.t -> BatInt.Safe_int.t -> int
      val equal : BatInt.Safe_int.t -> BatInt.Safe_int.t -> bool
      val ord : BatInt.Safe_int.t -> BatInt.Safe_int.t -> BatOrd.order
    end
end