sig
  type num =
    Num.num =
      Int of int
    | Big_int of Big_int.big_int
    | Ratio of Ratio.ratio
  type t = num
  val zero : num
  val one : num
  val neg : num -> num
  val abs : num -> num
  val add : num -> num -> num
  val sub : num -> num -> num
  val mul : num -> num -> num
  val div : num -> num -> num
  val modulo : num -> num -> num
  val pow : num -> num -> num
  val compare : num -> num -> int
  val ord : num -> num -> BatOrd.order
  val equal : num -> num -> bool
  val of_int : int -> num
  val to_int : num -> int
  val of_float : float -> num
  val to_float : num -> float
  val of_string : string -> num
  val to_string : num -> string
  val ( + ) : num -> num -> num
  val ( - ) : num -> num -> num
  val ( * ) : num -> num -> num
  val ( / ) : num -> num -> num
  val ( ** ) : num -> num -> num
  val max_num : num -> num -> num
  val min_num : num -> num -> num
  val quo : num -> num -> num
  val square : num -> num
  val succ : num -> num
  val pred : num -> num
  val is_integer : num -> bool
  val round : num -> num
  val floor : num -> num
  val ceil : num -> num
  val approx : num -> num
  val sign : num -> int
  val operations : num BatNumber.numeric
  val ( =/ ) : num -> num -> bool
  val ( </ ) : num -> num -> bool
  val ( >/ ) : num -> num -> bool
  val ( <=/ ) : num -> num -> bool
  val ( >=/ ) : num -> num -> bool
  val ( <>/ ) : num -> num -> bool
  val eq_num : num -> num -> bool
  val lt_num : num -> num -> bool
  val le_num : num -> num -> bool
  val gt_num : num -> num -> bool
  val ge_num : num -> num -> bool
  val approx_num_fix : int -> num -> string
  val approx_num_exp : int -> num -> string
  val nat_of_num : num -> Nat.nat
  val num_of_nat : Nat.nat -> num
  val num_of_big_int : Big_int.big_int -> num
  val big_int_of_num : num -> Big_int.big_int
  val ratio_of_num : num -> Ratio.ratio
  val num_of_ratio : Ratio.ratio -> num
  val float_of_num : num -> float
  val print : 'BatInnerIO.output -> t -> unit
  module TaggedInfix :
    sig
      val ( =/ ) : num -> num -> bool
      val ( </ ) : num -> num -> bool
      val ( >/ ) : num -> num -> bool
      val ( <=/ ) : num -> num -> bool
      val ( >=/ ) : num -> num -> bool
      val ( <>/ ) : num -> num -> bool
      val ( +/ ) : num -> num -> num
      val ( -/ ) : num -> num -> num
      val ( */ ) : num -> num -> num
      val ( // ) : num -> num -> num
      val ( **/ ) : num -> num -> num
    end
  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
      val ( =/ ) : num -> num -> bool
      val ( </ ) : num -> num -> bool
      val ( >/ ) : num -> num -> bool
      val ( <=/ ) : num -> num -> bool
      val ( >=/ ) : num -> num -> bool
      val ( <>/ ) : num -> num -> bool
      val ( +/ ) : num -> num -> num
      val ( -/ ) : num -> num -> num
      val ( */ ) : num -> num -> num
      val ( // ) : num -> num -> num
      val ( **/ ) : num -> num -> num
    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 ( +/ ) : num -> num -> num
  val add_num : num -> num -> num
  val minus_num : num -> num
  val ( -/ ) : num -> num -> num
  val sub_num : num -> num -> num
  val ( */ ) : num -> num -> num
  val mult_num : num -> num -> num
  val square_num : num -> num
  val ( // ) : num -> num -> num
  val div_num : num -> num -> num
  val quo_num : num -> num -> num
  val mod_num : num -> num -> num
  val ( **/ ) : num -> num -> num
  val power_num : num -> num -> num
  val abs_num : num -> num
  val succ_num : num -> num
  val pred_num : num -> num
  val incr_num : num ref -> unit
  val decr_num : num ref -> unit
  val is_integer_num : num -> bool
  val integer_num : num -> num
  val floor_num : num -> num
  val round_num : num -> num
  val ceiling_num : num -> num
  val sign_num : num -> int
  val string_of_num : num -> string
  val num_of_string : string -> num
  val int_of_num : num -> int
  val num_of_int : int -> num
  val compare_num : num -> num -> int
end