radix-tree-1.0.0.0: src/Radix/Word/Common.hs
{-# LANGUAGE PatternSynonyms #-}
module Radix.Word.Common
( Range (Range, ..)
) where
import Radix.Word.Foundation
-- | A closed interval between two keys.
data Range = -- | Invariant: \(k_L \le k_R\).
UnsafeRange
{-# UNPACK #-} !Key -- ^ \(k_L\)
{-# UNPACK #-} !Key -- ^ \(k_R\)
instance Show Range where
showsPrec d (UnsafeRange kL kR) =
showParen (d > 10) $
showString "Range " . shows kL
. showChar ' ' . shows kR
{-# COMPLETE Range #-}
-- | Reorders endpoints to fit mathematical notation:
-- \([12, 3]\) will be converted to \([3, 12]\).
--
-- Pattern matching guarantees \(k_1 \le k_2\).
pattern Range
:: Word -- ^ \(k_1\)
-> Word -- ^ \(k_2\)
-> Range
pattern Range kL kR <- UnsafeRange kL kR
where
Range k1 k2
| k1 <= k2 = UnsafeRange k1 k2
| otherwise = UnsafeRange k2 k1