range-0.1.0.0: Data/Range/RangeTreeInternal.hs
module Data.Range.RangeTreeInternal where
import Data.Range.Data
import Data.Range.RangeInternal
evaluateRangeTree :: (Ord a, Enum a) => RangeTree a -> RangeMerge a
evaluateRangeTree (RangeNode operation left right) = case operation of
RangeUnion -> leftEval `unionRangeMerges` rightEval
RangeIntersection -> leftEval `intersectionRangeMerges` rightEval
where
leftEval = evaluateRangeTree left
rightEval = evaluateRangeTree right
evaluateRangeTree (RangeNodeInvert node) = invertRM . evaluateRangeTree $ node
evaluateRangeTree (RangeLeaf ranges) = loadRanges ranges