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