| Copyright | (c) Christoph Breitkopf 2011 |
|---|---|
| License | BSD-style |
| Maintainer | chbreitkopf@gmail.com |
| Stability | experimental |
| Portability | portable |
| Safe Haskell | Safe |
| Language | Haskell98 |
Data.IntervalMap.Interval
Description
A conservative implementation of Intervals, mostly for use as keys in
a IntervalMap.
This should really be a typeclass, so you could have a tuple be an instance of Interval, but that is currently not possible in standard Haskell.
The contructor names of the half-open intervals seem somewhat clumsy, and I'm open to suggestions for better names.
- data Interval a
- = IntervalCO !a !a
- | ClosedInterval !a !a
- | OpenInterval !a !a
- | IntervalOC !a !a
- lowerBound :: Interval a -> a
- upperBound :: Interval a -> a
- leftClosed :: Interval a -> Bool
- rightClosed :: Interval a -> Bool
- isEmpty :: Ord a => Interval a -> Bool
- overlaps :: Ord a => Interval a -> Interval a -> Bool
- subsumes :: Ord a => Interval a -> Interval a -> Bool
- before :: Ord a => Interval a -> Interval a -> Bool
- after :: Ord a => Interval a -> Interval a -> Bool
- compareByUpper :: Ord a => Interval a -> Interval a -> Ordering
- combine :: Ord a => Interval a -> Interval a -> Maybe (Interval a)
- below :: Ord a => a -> Interval a -> Bool
- inside :: Ord a => a -> Interval a -> Bool
- above :: Ord a => a -> Interval a -> Bool
Interval type
Intervals with endpoints of type a.
Read and Show use mathematical notation with square brackets for closed
and parens for open intervals.
This is better for human readability, but is not a valid Haskell expression.
Closed intervals look like a list, open intervals look like a tuple,
and half-open intervals look like mismatched parens.
Constructors
| IntervalCO !a !a | Including lower bound, excluding upper |
| ClosedInterval !a !a | Closed at both ends |
| OpenInterval !a !a | Open at both ends |
| IntervalOC !a !a | Excluding lower bound, including upper |
Query
lowerBound :: Interval a -> a Source
Get the lower bound.
upperBound :: Interval a -> a Source
Get the upper bound.
leftClosed :: Interval a -> Bool Source
Does the interval include its lower bound?
rightClosed :: Interval a -> Bool Source
Does the interval include its upper bound?
Interval operations
subsumes :: Ord a => Interval a -> Interval a -> Bool Source
Does the first interval completely contain the second?
before :: Ord a => Interval a -> Interval a -> Bool Source
Interval strictly before another? True if the upper bound of the first interval is below the lower bound of the second.
after :: Ord a => Interval a -> Interval a -> Bool Source
Interval strictly after another? Same as 'flip before'.
compareByUpper :: Ord a => Interval a -> Interval a -> Ordering Source
Like compare, but considering the upper bound first.
combine :: Ord a => Interval a -> Interval a -> Maybe (Interval a) Source
If the intervals overlap combine them into one.