{-# LANGUAGE BangPatterns, UnboxedTuples, Safe #-} module Data.RangeSet.Internal.Extractors (module Data.RangeSet.Internal.Extractors) where import Prelude () import Data.RangeSet.Internal.Types import Data.RangeSet.Internal.SmartConstructors {-# INLINEABLE minRange #-} minRange :: E -> E -> RangeSet a -> (# E, E #) minRange :: forall a. E -> E -> RangeSet a -> (# E, E #) minRange !E l !E u RangeSet a Tip = (# E l, E u #) minRange E _ E _ (Fork H _ E l E u RangeSet a lt RangeSet a _) = forall a. E -> E -> RangeSet a -> (# E, E #) minRange E l E u RangeSet a lt {-# INLINEABLE maxRange #-} maxRange :: E -> E -> RangeSet a -> (# E, E #) maxRange :: forall a. E -> E -> RangeSet a -> (# E, E #) maxRange !E l !E u RangeSet a Tip = (# E l, E u #) maxRange E _ E _ (Fork H _ E l E u RangeSet a _ RangeSet a rt) = forall a. E -> E -> RangeSet a -> (# E, E #) maxRange E l E u RangeSet a rt {-# INLINE minDelete #-} minDelete :: E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) minDelete :: forall a. E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) minDelete !E l !E u !RangeSet a lt !RangeSet a rt = let (# !E ml, !E mu, RangeSet a t' #) = forall a. E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) go E l E u RangeSet a lt RangeSet a rt in (# E ml, E mu, RangeSet a t' #) where go :: E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) go :: forall a. E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) go !E l !E u RangeSet a Tip !RangeSet a rt = (# E l, E u, RangeSet a rt #) go E l E u (Fork H _ E ll E lu RangeSet a llt RangeSet a lrt) RangeSet a rt = let (# !E ml, !E mu, RangeSet a lt' #) = forall a. E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) go E ll E lu RangeSet a llt RangeSet a lrt in (# E ml, E mu, forall a. E -> E -> RangeSet a -> RangeSet a -> RangeSet a balanceR E l E u RangeSet a lt' RangeSet a rt #) {-# INLINE maxDelete #-} maxDelete :: E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) maxDelete :: forall a. E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) maxDelete !E l !E u !RangeSet a lt !RangeSet a rt = let (# !E ml, !E mu, RangeSet a t' #) = forall a. E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) go E l E u RangeSet a lt RangeSet a rt in (# E ml, E mu, RangeSet a t' #) where go :: E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) go :: forall a. E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) go !E l !E u !RangeSet a lt RangeSet a Tip = (# E l, E u, RangeSet a lt #) go E l E u RangeSet a lt (Fork H _ E rl E ru RangeSet a rlt RangeSet a rrt) = let (# !E ml, !E mu, RangeSet a rt' #) = forall a. E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) go E rl E ru RangeSet a rlt RangeSet a rrt in (# E ml, E mu, forall a. E -> E -> RangeSet a -> RangeSet a -> RangeSet a balanceL E l E u RangeSet a lt RangeSet a rt' #)