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