X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FComplex.hs;h=bbc8a07db2449f75bf26c1d70c9eb6eef4b74cb2;hb=4d9023e9281493aea632196980543dfdedfd9910;hp=3acfa0382f18343ac996ef77aeff289dd80696b1;hpb=5ba151f462d0ec7ee9241b3c259979d51777f39b;p=ghc-base.git diff --git a/Data/Complex.hs b/Data/Complex.hs index 3acfa03..bbc8a07 100644 --- a/Data/Complex.hs +++ b/Data/Complex.hs @@ -44,6 +44,9 @@ module Data.Complex import Prelude import Data.Typeable +#ifdef __GLASGOW_HASKELL__ +import Data.Data (Data) +#endif #ifdef __HUGS__ import Hugs.Prelude(Num(fromInt), Fractional(fromDouble)) @@ -62,7 +65,11 @@ infix 6 :+ data (RealFloat a) => Complex a = !a :+ !a -- ^ forms a complex number from its real and imaginary -- rectangular components. +# if __GLASGOW_HASKELL__ + deriving (Eq, Show, Read, Data) +# else deriving (Eq, Show, Read) +# endif -- ----------------------------------------------------------------------------- -- Functions over Complex @@ -103,9 +110,10 @@ polar z = (magnitude z, phase z) {-# SPECIALISE magnitude :: Complex Double -> Double #-} magnitude :: (RealFloat a) => Complex a -> a magnitude (x:+y) = scaleFloat k - (sqrt ((scaleFloat mk x)^(2::Int) + (scaleFloat mk y)^(2::Int))) + (sqrt (sqr (scaleFloat mk x) + sqr (scaleFloat mk y))) where k = max (exponent x) (exponent y) mk = - k + sqr z = z * z -- | The phase of a complex number, in the range @(-'pi', 'pi']@. -- If the magnitude is zero, then so is the phase.