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