From: simonmar Date: Wed, 19 Sep 2001 14:05:01 +0000 (+0000) Subject: [project @ 2001-09-19 14:05:01 by simonmar] X-Git-Tag: Approximately_9120_patches~955 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=d14821d2bccc767c99222121820c3960d673ca2b;p=ghc-hetmet.git [project @ 2001-09-19 14:05:01 by simonmar] Add some specialisations for Complex Double. (are SPECIALISE instance pragmas now ignored?) --- 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