| ||||||||||||||||||||||||||

| ||||||||||||||||||||||||||

| ||||||||||||||||||||||||||

Description | ||||||||||||||||||||||||||

A range has an upper and lower boundary. | ||||||||||||||||||||||||||

Synopsis | ||||||||||||||||||||||||||

| ||||||||||||||||||||||||||

Construction | ||||||||||||||||||||||||||

data Range v | ||||||||||||||||||||||||||

| ||||||||||||||||||||||||||

emptyRange :: DiscreteOrdered v => Range v | ||||||||||||||||||||||||||

The empty range | ||||||||||||||||||||||||||

fullRange :: DiscreteOrdered v => Range v | ||||||||||||||||||||||||||

The full range. All values are within it. | ||||||||||||||||||||||||||

Predicates | ||||||||||||||||||||||||||

rangeIsEmpty :: DiscreteOrdered v => Range v -> Bool | ||||||||||||||||||||||||||

A range is empty unless its upper boundary is greater than its lower boundary. | ||||||||||||||||||||||||||

rangeOverlap :: DiscreteOrdered v => Range v -> Range v -> Bool | ||||||||||||||||||||||||||

Two ranges overlap if their intersection is non-empty. | ||||||||||||||||||||||||||

rangeEncloses :: DiscreteOrdered v => Range v -> Range v -> Bool | ||||||||||||||||||||||||||

The first range encloses the second if every value in the second range is also within the first range. If the second range is empty then this is always true. | ||||||||||||||||||||||||||

rangeSingletonValue :: DiscreteOrdered v => Range v -> Maybe v | ||||||||||||||||||||||||||

If the range is a singleton, returns Just the value. Otherwise returns
Nothing.
| ||||||||||||||||||||||||||

Membership | ||||||||||||||||||||||||||

rangeHas :: Ord v => Range v -> v -> Bool | ||||||||||||||||||||||||||

True if the value is within the range. | ||||||||||||||||||||||||||

rangeListHas :: Ord v => [Range v] -> v -> Bool | ||||||||||||||||||||||||||

True if the value is within one of the ranges. | ||||||||||||||||||||||||||

Set Operations | ||||||||||||||||||||||||||

singletonRange :: DiscreteOrdered v => v -> Range v | ||||||||||||||||||||||||||

A range containing a single value | ||||||||||||||||||||||||||

rangeIntersection :: DiscreteOrdered v => Range v -> Range v -> Range v | ||||||||||||||||||||||||||

Intersection of two ranges, if any. | ||||||||||||||||||||||||||

rangeUnion :: DiscreteOrdered v => Range v -> Range v -> [Range v] | ||||||||||||||||||||||||||

Union of two ranges. Returns one or two results. If there are two results then they are guaranteed to have a non-empty gap in between, but may not be in ascending order. | ||||||||||||||||||||||||||

rangeDifference :: DiscreteOrdered v => Range v -> Range v -> [Range v] | ||||||||||||||||||||||||||

range1 minus range2. Returns zero, one or two results. Multiple
results are guaranteed to have non-empty gaps in between, but may not be in
ascending order.
| ||||||||||||||||||||||||||

QuickCheck properties | ||||||||||||||||||||||||||

Range union prop_union r1 r2 n = (r1 `rangeHas` n || r2 `rangeHas` n) == (r1 `rangeUnion` r2) `rangeListHas` n Range intersection prop_intersection r1 r2 n = (r1 `rangeHas` n && r2 `rangeHas` n) == (r1 `rangeIntersection` r2) `rangeHas` n Range difference prop_difference r1 r2 n = (r1 `rangeHas` n && not (r2 `rangeHas` n)) == (r1 `rangeDifference` r2) `rangeListHas` n Singleton range prop_singletonHas v = singletonRange v `rangeHas` v prop_singletonConverse v = rangeSingletonValue (singletonRange v) == Just v | ||||||||||||||||||||||||||

Produced by Haddock version 0.8 |