From d14821d2bccc767c99222121820c3960d673ca2b Mon Sep 17 00:00:00 2001 From: simonmar Date: Wed, 19 Sep 2001 14:05:01 +0000 Subject: [PATCH 1/1] [project @ 2001-09-19 14:05:01 by simonmar] Add some specialisations for Complex Double. (are SPECIALISE instance pragmas now ignored?) --- ghc/lib/std/Complex.lhs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ghc/lib/std/Complex.lhs b/ghc/lib/std/Complex.lhs index 748d571..78d8a74 100644 --- a/ghc/lib/std/Complex.lhs +++ b/ghc/lib/std/Complex.lhs @@ -1,5 +1,5 @@ % ----------------------------------------------------------------------------- -% $Id: Complex.lhs,v 1.5 2000/06/30 13:39:35 simonmar Exp $ +% $Id: Complex.lhs,v 1.6 2001/09/19 14:05:01 simonmar Exp $ % % (c) The University of Glasgow, 1994-2000 % @@ -55,28 +55,36 @@ data (RealFloat a) => Complex a = !a :+ !a deriving (Eq, Read, Show) %********************************************************* \begin{code} +{-# SPECIALISE realPart :: Complex Double -> Double #-} +{-# SPECIALISE imagPart :: Complex Double -> Double #-} realPart, imagPart :: (RealFloat a) => Complex a -> a realPart (x :+ _) = x imagPart (_ :+ y) = y +{-# SPECIALISE conjugate :: Complex Double -> Complex Double #-} conjugate :: (RealFloat a) => Complex a -> Complex a conjugate (x:+y) = x :+ (-y) +{-# SPECIALISE mkPolar :: Double -> Double -> Complex Double #-} mkPolar :: (RealFloat a) => a -> a -> Complex a mkPolar r theta = r * cos theta :+ r * sin theta +{-# SPECIALISE cis :: Double -> Complex Double #-} cis :: (RealFloat a) => a -> Complex a cis theta = cos theta :+ sin theta +{-# SPECIALISE polar :: Complex Double -> (Double,Double) #-} polar :: (RealFloat a) => Complex a -> (a,a) 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))) where k = max (exponent x) (exponent y) mk = - k +{-# SPECIALISE phase :: Complex Double -> Double #-} phase :: (RealFloat a) => Complex a -> a phase (0 :+ 0) = 0 -- SLPJ July 97 from John Peterson phase (x:+y) = atan2 y x -- 1.7.10.4