## Parameters

`module M : BoundedType`

## Signature

`type base_u = M.base_t`

Raw unbounded type

`type u = M.t`

`base_u` after bounding constraints have been applied

`type t = private M.t`

Private version of `u` to avoid construction of `t` values without using `make` below.

`val bounds : base_u bound_t * base_u bound_t`

`bounds` defines the `(min, max)` bounds for the bounded range

`val make : base_u -> t`

`make x` will return a value of type `t` derived from `x`.

`val extract : t -> u`

`extract x` will return `x` as a value of type `u`. A similar result could be achieved with `(x :> u)`

`val map : (base_u -> base_u) -> t -> t option`

`map f x` applies `f` to `x`. Returns `Some y` if `x` can be converted back to type `base_u`, otherwise returns `None`.

`val map2 : (base_u -> base_u -> base_u) -> t -> t -> t option`

`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`.

`val map_exn : (base_u -> base_u) -> t -> t`

`map_exn f x` applies `f` to `x`. Returns `y` if `x` can be converted back to type `base_u`, otherwise raise an exception.

`val map2_exn : (base_u -> base_u -> base_u) -> t -> t -> t`

`map2_exn f x y` applies `f` to `x` and `y`. Returns `z` if `x` and `y` can be converted back to type `base_u`, otherwise raise an exception.