IntervalMap-0.3.0.2: Maps from Intervals to values, with efficient search.

Portability portable experimental chbreitkopf@gmail.com Safe-Inferred

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.

Synopsis

# Interval type

data Interval a Source

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

Instances

 Functor Interval Eq a => Eq (Interval a) Ord a => Ord (Interval a) Read a => Read (Interval a) Show a => Show (Interval a) NFData a => NFData (Interval a)

# Query

lowerBound :: Interval a -> aSource

Get the lower bound.

upperBound :: Interval a -> aSource

Get the upper bound.

Does the interval include its lower bound?

Does the interval include its upper bound?

isEmpty :: Ord a => Interval a -> BoolSource

Is the interval empty?

# Interval operations

overlaps :: Ord a => Interval a -> Interval a -> BoolSource

Do the two intervals overlap?

subsumes :: Ord a => Interval a -> Interval a -> BoolSource

Does the first interval completely contain the second?

before :: Ord a => Interval a -> Interval a -> BoolSource

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

Interval strictly after another? Same as 'flip before'.

compareByUpper :: Ord a => Interval a -> Interval a -> OrderingSource

Like `compare`, but considering the upper bound first.

# Point operations

below :: Ord a => a -> Interval a -> BoolSource

Is a point strictly less than lower bound?

inside :: Ord a => a -> Interval a -> BoolSource

Does the interval contain a given point?

above :: Ord a => a -> Interval a -> BoolSource

Is a point strictly greater than upper bound?