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