X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FClasses.hs;h=17d0f93e1b991a6873622869eda8741d6df8b4cd;hb=6685444335fe57d5d86b61965989e45f34fddf0e;hp=30f706a61056f3e0b7040499eec74b244454ef39;hpb=b40cf1d33ed4f7da5b4edf0eff8251d30e32f137;p=ghc-base.git diff --git a/GHC/Classes.hs b/GHC/Classes.hs index 30f706a..17d0f93 100644 --- a/GHC/Classes.hs +++ b/GHC/Classes.hs @@ -1,5 +1,5 @@ -{-# OPTIONS_GHC -XNoImplicitPrelude #-} +{-# LANGUAGE NoImplicitPrelude, MagicHash, StandaloneDeriving #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} -- XXX -fno-warn-unused-imports needed for the GHC.Tuple import below. Sigh. {-# OPTIONS_HADDOCK hide #-} @@ -19,7 +19,6 @@ module GHC.Classes where -import GHC.Bool import GHC.Integer -- GHC.Magic is used in some derived instances import GHC.Magic () @@ -101,6 +100,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 +201,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