loc-0.2.0.0: src/Data/Loc/Internal/Map.hs
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