ref: db16f46fa7757c6bca1d8a9fdda3a23ede5ccdae
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.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)