{-|

The modules in this hierarchy implement sets of nonoverlapping,
nonadjacent intervals. In the literature, one such implementation of
these is known as
<http://web.engr.oregonstate.edu/~erwig/diet/ Discrete Interval Encoding Trees>
(DIETs). This implementation is discussed in
<http://web.engr.oregonstate.edu/~erwig/papers/Diet_JFP98.pdf Diets for Fat Sets>,
Martin Erwig. Journal of Functional Programming, Vol. 8, No. 6, 627-632, 1998.
In this package, we use the term diet set to refer to not just that one
implementation but to any set of nonoverlapping, nonadjacent intervals.

These are not the same as interval sets. An interval set preserves
the original intervals that the user inserted into the set. A diet set
will coalesce adjacent or overlapping ranges. For example:

>>> ⦃[2,6]⦄ ⋄ ⦃[1,3]⦄ ⋄ ⦃[8,11]⦄ ⋄ ⦃[12,12]⦄ 
⦃[1,6],[8,12]⦄

The implementation in this packages is optimized for reads. Building
a diet set is expensive since the array-backed implementation cannot
do any sharing when it creates a new data structure. However, testing
for membership is @O(log n)@. 

-}

module Data.Diet.Set () where