ref: cb7ae3b919c7ab22cd6cb6003b6b63a5931a6402
dir: /lib/Data/Ord.hs/
module Data.Ord(
module Data.Ord,
module Data.Ordering_Type,
) where
import Prelude() -- do not import Prelude
import Primitives
import Data.Bool_Type
import Data.Bounded
import Data.Functor
import Data.Ordering_Type
import Data.Eq
import Text.Show
infix 4 <,<=,>,>=
class Eq a => Ord a where
compare :: a -> a -> Ordering
(<) :: a -> a -> Bool
(<=) :: a -> a -> Bool
(>) :: a -> a -> Bool
(>=) :: a -> a -> Bool
max :: a -> a -> a
min :: a -> a -> a
compare x y = if x == y then EQ
else if x <= y then LT
else GT
x <= y = case compare x y of { GT -> False; _ -> True }
x >= y = y <= x
x > y = if x <= y then False else True
x < y = if y <= x then False else True
min x y = if x <= y then x else y
max x y = if x <= y then y else x
instance Eq Ordering where
LT == LT = True
EQ == EQ = True
GT == GT = True
_ == _ = False
instance Show Ordering where
showsPrec _ LT = showString "LT"
showsPrec _ EQ = showString "EQ"
showsPrec _ GT = showString "GT"
instance Bounded Ordering where
minBound = LT
maxBound = GT
comparing :: (Ord b) => (a -> b) -> a -> a -> Ordering
comparing f x y = compare (f x) (f y)
{-
newtype Down a = Down
{ getDown :: a -- ^ @since 4.14.0.0
}
deriving
( Eq -- ^ @since 4.6.0.0
, Num -- ^ @since 4.11.0.0
, Semigroup -- ^ @since 4.11.0.0
, Monoid -- ^ @since 4.11.0.0
, Bits -- ^ @since 4.14.0.0
, FiniteBits -- ^ @since 4.14.0.0
, Floating -- ^ @since 4.14.0.0
, Fractional -- ^ @since 4.14.0.0
, Ix -- ^ @since 4.14.0.0
, Real -- ^ @since 4.14.0.0
, RealFrac -- ^ @since 4.14.0.0
, RealFloat -- ^ @since 4.14.0.0
, Storable -- ^ @since 4.14.0.0
)
-}
newtype Down a = Down a
getDown :: Down a -> a
getDown (Down a) = a
{-
instance (Read a) => Read (Down a) where
readsPrec d = readParen (d > 10) $ \ r ->
[(Down x,t) | ("Down",s) <- lex r, (x,t) <- readsPrec 11 s]
-}
{- In Data.Orphans
instance (Show a) => Show (Down a) where
-}
instance Eq a => Eq (Down a) where
Down x == Down y = x == y
instance Ord a => Ord (Down a) where
compare (Down x) (Down y) = y `compare` x
instance Bounded a => Bounded (Down a) where
minBound = Down maxBound
maxBound = Down minBound
instance Functor Down where
fmap f (Down a) = Down (f a)
{-
-- | @since 4.11.0.0
instance Applicative Down where
pure = Down
(<*>) = coerce
-- | @since 4.11.0.0
instance Monad Down where
Down a >>= k = k a
-}