module Data.Loc.Internal.Map ( module Data.Map, below, above, belowInclusive, aboveInclusive, ) where import Data.Loc.Internal.Prelude import Data.Map -- | @'below' k m@ is the subset of 'Map' @m@ whose keys are less than @k@ below :: Ord k => k -> Map k a -> Map k a below k m = let (x, _) = split k m in x -- | @'below' k m@ is the subset of 'Map' @m@ whose keys are greater than @k@ above :: Ord k => k -> Map k a -> Map k a above k m = let (_, x) = split k m in x -- | @'belowInclusive' k m@ is the subset of 'Map' @m@ whose keys are less -- than or equal to @k@ belowInclusive :: Ord k => k -> Map k a -> Map k a belowInclusive k m = let (x, at, _) = splitLookup k m in case at of Nothing -> x Just v -> insert k v x -- | @'aboveInclusive' k m@ is the subset of 'Map' @m@ whose keys are -- greater than or equal to @k@ aboveInclusive :: Ord k => k -> Map k a -> Map k a aboveInclusive k m = let (_, at, x) = splitLookup k m in case at of Nothing -> x Just v -> insert k v x