`sig type 'a bound_t = [ `c of 'a | `o of 'a | `u ] type ('a, 'b) bounding_f = bounds:'a BatBounded.bound_t * 'a BatBounded.bound_t -> 'a -> 'b val bounding_of_ord : default_low:'b -> default_high:'b -> ('a -> 'b) -> ('a -> 'a -> BatOrd.order) -> ('a, 'b) BatBounded.bounding_f val bounding_of_ord_chain : low:('a -> 'b) -> high:('a -> 'b) -> ('a -> 'b) -> ('a -> 'a -> BatOrd.order) -> ('a, 'b) BatBounded.bounding_f val saturate_of_ord : bounds:'a BatBounded.bound_t * 'a BatBounded.bound_t -> ('a -> 'a -> BatOrd.order) -> 'a -> 'a val opt_of_ord : bounds:'a BatBounded.bound_t * 'a BatBounded.bound_t -> ('a -> 'a -> BatOrd.order) -> 'a -> 'a option module type BoundedType = sig type base_t type t val bounds : BatBounded.BoundedType.base_t BatBounded.bound_t * BatBounded.BoundedType.base_t BatBounded.bound_t val bounded : (BatBounded.BoundedType.base_t, BatBounded.BoundedType.t) BatBounded.bounding_f val base_of_t : BatBounded.BoundedType.t -> BatBounded.BoundedType.base_t option val base_of_t_exn : BatBounded.BoundedType.t -> BatBounded.BoundedType.base_t end module type BoundedNumericType = sig type base_t type t val bounds : base_t bound_t * base_t bound_t val bounded : (base_t, t) bounding_f val base_of_t : t -> base_t option val base_of_t_exn : t -> base_t module Infix : sig 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 -> base_t BatEnum.t val ( --- ) : base_t -> base_t -> base_t BatEnum.t end end module type S = sig type base_u type u type t = private BatBounded.S.u val bounds : BatBounded.S.base_u BatBounded.bound_t * BatBounded.S.base_u BatBounded.bound_t val make : BatBounded.S.base_u -> BatBounded.S.t external extract : BatBounded.S.t -> BatBounded.S.u = "%identity" val map : (BatBounded.S.base_u -> BatBounded.S.base_u) -> BatBounded.S.t -> BatBounded.S.t option val map2 : (BatBounded.S.base_u -> BatBounded.S.base_u -> BatBounded.S.base_u) -> BatBounded.S.t -> BatBounded.S.t -> BatBounded.S.t option val map_exn : (BatBounded.S.base_u -> BatBounded.S.base_u) -> BatBounded.S.t -> BatBounded.S.t val map2_exn : (BatBounded.S.base_u -> BatBounded.S.base_u -> BatBounded.S.base_u) -> BatBounded.S.t -> BatBounded.S.t -> BatBounded.S.t end module type NumericSig = sig type base_u type u type t = private u val bounds : base_u bound_t * base_u bound_t val make : base_u -> t external extract : t -> u = "%identity" val map : (base_u -> base_u) -> t -> t option val map2 : (base_u -> base_u -> base_u) -> t -> t -> t option val map_exn : (base_u -> base_u) -> t -> t val map2_exn : (base_u -> base_u -> base_u) -> t -> t -> t val ( + ) : t -> base_u -> t val ( - ) : t -> base_u -> t val ( * ) : t -> base_u -> t val ( / ) : t -> base_u -> t val ( +: ) : t -> t -> t val ( -: ) : t -> t -> t val ( *: ) : t -> t -> t val ( /: ) : t -> t -> t end module Make : functor (M : BoundedType) -> sig type base_u = M.base_t type u = M.t type t = private M.t val bounds : base_u bound_t * base_u bound_t val make : base_u -> t external extract : t -> u = "%identity" val map : (base_u -> base_u) -> t -> t option val map2 : (base_u -> base_u -> base_u) -> t -> t -> t option val map_exn : (base_u -> base_u) -> t -> t val map2_exn : (base_u -> base_u -> base_u) -> t -> t -> t end module MakeNumeric : functor (M : BoundedNumericType) -> sig type base_u = M.base_t type u = M.t type t = private M.t val bounds : base_u bound_t * base_u bound_t val make : base_u -> t external extract : t -> u = "%identity" val map : (base_u -> base_u) -> t -> t option val map2 : (base_u -> base_u -> base_u) -> t -> t -> t option val map_exn : (base_u -> base_u) -> t -> t val map2_exn : (base_u -> base_u -> base_u) -> t -> t -> t val ( + ) : t -> base_u -> t val ( - ) : t -> base_u -> t val ( * ) : t -> base_u -> t val ( / ) : t -> base_u -> t val ( +: ) : t -> t -> t val ( -: ) : t -> t -> t val ( *: ) : t -> t -> t val ( /: ) : t -> t -> t end end`