From: Ian Lynagh Date: Sat, 5 Dec 2009 18:12:38 +0000 (+0000) Subject: De-orphan Eq/Ord Float/Double X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=b40ec3b25b823a39cf27f1ba96014570c784d034;p=ghc-base.git De-orphan Eq/Ord Float/Double --- diff --git a/GHC/Classes.hs b/GHC/Classes.hs index 30f706a..3e3e72f 100644 --- a/GHC/Classes.hs +++ b/GHC/Classes.hs @@ -101,6 +101,12 @@ instance Eq Integer where (==) = eqInteger (/=) = neqInteger +instance Eq Float where + (F# x) == (F# y) = x `eqFloat#` y + +instance Eq Double where + (D# x) == (D# y) = x ==## y + -- | The 'Ord' class is used for totally ordered datatypes. -- -- Instances of 'Ord' can be derived for any user-defined @@ -196,6 +202,28 @@ instance Ord Integer where (>=) = geInteger compare = compareInteger +instance Ord Float where + (F# x) `compare` (F# y) + = if x `ltFloat#` y then LT + else if x `eqFloat#` y then EQ + else GT + + (F# x) < (F# y) = x `ltFloat#` y + (F# x) <= (F# y) = x `leFloat#` y + (F# x) >= (F# y) = x `geFloat#` y + (F# x) > (F# y) = x `gtFloat#` y + +instance Ord Double where + (D# x) `compare` (D# y) + = if x <## y then LT + else if x ==## y then EQ + else GT + + (D# x) < (D# y) = x <## y + (D# x) <= (D# y) = x <=## y + (D# x) >= (D# y) = x >=## y + (D# x) > (D# y) = x >## y + -- OK, so they're technically not part of a class...: -- Boolean functions diff --git a/GHC/Float.lhs b/GHC/Float.lhs index 9a4d4d9..d165088 100644 --- a/GHC/Float.lhs +++ b/GHC/Float.lhs @@ -154,19 +154,6 @@ class (RealFrac a, Floating a) => RealFloat a where %********************************************************* \begin{code} -instance Eq Float where - (F# x) == (F# y) = x `eqFloat#` y - -instance Ord Float where - (F# x) `compare` (F# y) | x `ltFloat#` y = LT - | x `eqFloat#` y = EQ - | otherwise = GT - - (F# x) < (F# y) = x `ltFloat#` y - (F# x) <= (F# y) = x `leFloat#` y - (F# x) >= (F# y) = x `geFloat#` y - (F# x) > (F# y) = x `gtFloat#` y - instance Num Float where (+) x y = plusFloat x y (-) x y = minusFloat x y @@ -298,19 +285,6 @@ instance Show Float where %********************************************************* \begin{code} -instance Eq Double where - (D# x) == (D# y) = x ==## y - -instance Ord Double where - (D# x) `compare` (D# y) | x <## y = LT - | x ==## y = EQ - | otherwise = GT - - (D# x) < (D# y) = x <## y - (D# x) <= (D# y) = x <=## y - (D# x) >= (D# y) = x >=## y - (D# x) > (D# y) = x >## y - instance Num Double where (+) x y = plusDouble x y (-) x y = minusDouble x y