{-# LANGUAGE PatternSynonyms #-}
module Radix.Word.Common
( Range (Range, ..)
) where
import Radix.Word.Foundation
data Range =
UnsafeRange
{-# UNPACK #-} !Key
{-# UNPACK #-} !Key
instance Show Range where
showsPrec :: Int -> Range -> ShowS
showsPrec Int
d (UnsafeRange Word
kL Word
kR) =
Bool -> ShowS -> ShowS
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
10) (ShowS -> ShowS) -> ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$
String -> ShowS
showString String
"Range " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> ShowS
forall a. Show a => a -> ShowS
shows Word
kL
ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> ShowS
showChar Char
' ' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> ShowS
forall a. Show a => a -> ShowS
shows Word
kR
{-# COMPLETE Range #-}
pattern Range
:: Word
-> Word
-> Range
pattern $mRange :: forall {r}. Range -> (Word -> Word -> r) -> ((# #) -> r) -> r
$bRange :: Word -> Word -> Range
Range kL kR <- UnsafeRange kL kR
where
Range Word
k1 Word
k2
| Word
k1 Word -> Word -> Bool
forall a. Ord a => a -> a -> Bool
<= Word
k2 = Word -> Word -> Range
UnsafeRange Word
k1 Word
k2
| Bool
otherwise = Word -> Word -> Range
UnsafeRange Word
k2 Word
k1