sig
exception Overflow
exception NaN
type 'a numeric =
'a BatNumber.numeric = {
zero : 'a;
one : 'a;
neg : 'a -> 'a;
succ : 'a -> 'a;
pred : 'a -> 'a;
abs : 'a -> 'a;
add : 'a -> 'a -> 'a;
sub : 'a -> 'a -> 'a;
mul : 'a -> 'a -> 'a;
div : 'a -> 'a -> 'a;
modulo : 'a -> 'a -> 'a;
pow : 'a -> 'a -> 'a;
compare : 'a -> 'a -> int;
of_int : int -> 'a;
to_int : 'a -> int;
of_string : string -> 'a;
to_string : 'a -> string;
of_float : float -> 'a;
to_float : 'a -> float;
}
module type Numeric =
sig
type t
val zero : t
val one : t
val neg : t -> t
val abs : t -> t
val add : t -> t -> t
val sub : t -> t -> t
val mul : t -> t -> t
val div : t -> t -> t
val modulo : t -> t -> t
val pow : t -> t -> t
val compare : t -> t -> int
val of_int : int -> t
val to_int : t -> int
val of_float : float -> t
val to_float : t -> float
val of_string : string -> t
val to_string : t -> string
val ( + ) : t -> t -> t
val ( - ) : t -> t -> t
val ( * ) : t -> t -> t
val ( / ) : t -> t -> t
val ( ** ) : t -> t -> t
val ( <> ) : t -> t -> bool
val ( >= ) : t -> t -> bool
val ( <= ) : t -> t -> bool
val ( > ) : t -> t -> bool
val ( < ) : t -> t -> bool
val ( = ) : t -> t -> bool
val operations : t numeric
end
module type Bounded = sig type t val min_num : t val max_num : t end
module type Discrete =
sig
type t
val to_int : t -> int
val succ : t -> t
val pred : t -> t
val ( -- ) : t -> t -> t BatEnum.t
val ( --- ) : t -> t -> t BatEnum.t
end
module type NUMERIC_BASE =
sig
type t
val zero : t
val one : t
val neg : t -> t
val succ : t -> t
val pred : t -> t
val abs : t -> t
val add : t -> t -> t
val sub : t -> t -> t
val mul : t -> t -> t
val div : t -> t -> t
val modulo : t -> t -> t
val pow : t -> t -> t
val compare : t -> t -> int
val of_int : int -> t
val to_int : t -> int
val of_string : string -> t
val to_string : t -> string
val of_float : float -> t
val to_float : t -> float
end
module MakeNumeric :
functor (Base : NUMERIC_BASE) ->
sig
val operations : Base.t numeric
val ( + ) : Base.t -> Base.t -> Base.t
val ( - ) : Base.t -> Base.t -> Base.t
val ( * ) : Base.t -> Base.t -> Base.t
val ( / ) : Base.t -> Base.t -> Base.t
val ( ** ) : Base.t -> Base.t -> Base.t
val ( <> ) : Base.t -> Base.t -> bool
val ( >= ) : Base.t -> Base.t -> bool
val ( <= ) : Base.t -> Base.t -> bool
val ( > ) : Base.t -> Base.t -> bool
val ( < ) : Base.t -> Base.t -> bool
val ( = ) : Base.t -> Base.t -> bool
end
val generic_pow :
zero:'a ->
one:'a ->
div_two:('a -> 'a) ->
mod_two:('a -> 'a) -> mul:('a -> 'a -> 'a) -> 'a -> 'a -> 'a
end