module Data.Ordering (
flipOrdering,
ifEQ, noLT, noGT,
isLE, isNE, isGE,
toSign, fromSign, adjustBy,
Ordering(..)
) where
import Data.Ord (Ordering(..))
flipOrdering :: Ordering -> Ordering
flipOrdering :: Ordering -> Ordering
flipOrdering Ordering
o =
case Ordering
o of
Ordering
LT -> Ordering
GT
Ordering
EQ -> Ordering
EQ
Ordering
GT -> Ordering
LT
ifEQ :: Ordering -> Ordering -> Ordering
ifEQ :: Ordering -> Ordering -> Ordering
ifEQ Ordering
i Ordering
o =
case Ordering
o of
Ordering
EQ -> Ordering
i
Ordering
x -> Ordering
x
noLT :: Ordering -> Ordering
noLT :: Ordering -> Ordering
noLT Ordering
o =
case Ordering
o of
Ordering
LT -> Ordering
EQ
Ordering
x -> Ordering
x
noGT :: Ordering -> Ordering
noGT :: Ordering -> Ordering
noGT Ordering
o =
case Ordering
o of
Ordering
GT -> Ordering
EQ
Ordering
x -> Ordering
x
isLE :: Ordering -> Bool
isLE :: Ordering -> Bool
isLE = (Ordering -> Ordering -> Bool
forall a. Eq a => a -> a -> Bool
/= Ordering
GT)
isNE :: Ordering -> Bool
isNE :: Ordering -> Bool
isNE = (Ordering -> Ordering -> Bool
forall a. Eq a => a -> a -> Bool
/= Ordering
EQ)
isGE :: Ordering -> Bool
isGE :: Ordering -> Bool
isGE = (Ordering -> Ordering -> Bool
forall a. Eq a => a -> a -> Bool
/= Ordering
LT)
toSign :: Num n => Ordering -> n
toSign :: forall n. Num n => Ordering -> n
toSign Ordering
o =
case Ordering
o of
Ordering
LT -> -n
1
Ordering
EQ -> n
0
Ordering
GT -> n
1
fromSign :: (Ord n, Num n) => n -> Ordering
fromSign :: forall n. (Ord n, Num n) => n -> Ordering
fromSign n
o = n -> n -> Ordering
forall a. Ord a => a -> a -> Ordering
compare n
o n
0
adjustBy :: Num a => a -> Ordering -> a -> a
adjustBy :: forall a. Num a => a -> Ordering -> a -> a
adjustBy a
d Ordering
o a
x =
case Ordering
o of
Ordering
LT -> a
x a -> a -> a
forall a. Num a => a -> a -> a
- a
d
Ordering
EQ -> a
x
Ordering
GT -> a
x a -> a -> a
forall a. Num a => a -> a -> a
+ a
d