The intervals package

A Numeric.Interval.Interval is a closed, convex set of floating point values.

This package is careful to manage the rounding direction of each floating point
operation to ensure that the resulting interval is conservative. Effectively the lower bound of each computation is always rounded down, and the upper bound is rounded up.

The correctness of this package relies on the correctness of the underlying libm's handling of rounding modes.