BatBounded.MakeFunctor to build an implementation of a bounded type given the bounded values definition M
module M : BoundedTypetype base_u = M.base_tRaw unbounded type
type t = private M.tbounds defines the (min, max) bounds for the bounded range
extract x will return x as a value of type u. A similar result could be achieved with (x :> u)
map f x applies f to x. Returns Some y if x can be converted back to type base_u, otherwise returns None.
map2 f x y applies f to x and y. Returns Some z if x and y can be converted back to type base_u, otherwise returns None.
map_exn f x applies f to x. Returns y if x can be converted back to type base_u, otherwise raise an exception.