rset-1.0.0: src/Data/Set/Range/Query.hs
{- |
Module : Data.Set.Range.Query
Description : Membership testing.
Copyright : (c) 2017 Daniel Lovasko
License : BSD2
Maintainer : Daniel Lovasko <daniel.lovasko@gmail.com>
Stability : stable
Portability : portable
-}
module Data.Set.Range.Query
( queryPoint
, queryRange
) where
import Data.Set.Range.Overlap
import Data.Set.Range.Types
-- | Test whether a point is included in the range set.
queryPoint :: Ord a
=> a -- ^ point
-> RangeSet a -- ^ range
-> Bool -- ^ decision
queryPoint p = queryRange (p,p)
-- | Test whether a range is included in the range set.
queryRange :: Ord a
=> (a,a) -- ^ range
-> RangeSet a -- ^ range set
-> Bool -- ^ decision
queryRange _ [] = False
queryRange x (r : rs) = go $ overlap x r
where
go Equal = True
go FstSmaller = False
go FstInside = True
go FstOverlap = False
go SndSmaller = queryRange x rs
go SndInside = False
go SndOverlap = False