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 compare : BatInt.t -> BatInt.t -> 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"
  val print : 'BatInnerIO.output -> int -> unit
  val xprint : 'BatInnerIO.output -> int -> unit
  val t_printer : BatInt.t BatValue_printer.t
  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 min_num : BatInt.Safe_int.t
      val max_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 compare : BatInt.Safe_int.t -> BatInt.Safe_int.t -> int
      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"
      val print : 'BatInnerIO.output -> BatInt.Safe_int.t -> unit
    end
end