{-# LANGUAGE RebindableSyntax #-}
module Data.YAP.Complex
(
Complex((:+))
, realPart
, imagPart
, mkPolar
, cis
, polar
, magnitude
, phase
, conjugate
) where
import Data.YAP.Algebra.Internal
import Prelude (Double)
import Data.Complex (Complex((:+)))
realPart :: Complex a -> a
realPart :: forall a. Complex a -> a
realPart (a
x :+ a
_) = a
x
imagPart :: Complex a -> a
imagPart :: forall a. Complex a -> a
imagPart (a
_ :+ a
y) = a
y
{-# SPECIALISE conjugate :: Complex Double -> Complex Double #-}
conjugate :: (AbelianGroup a) => Complex a -> Complex a
conjugate :: forall a. AbelianGroup a => Complex a -> Complex a
conjugate (a
x:+a
y) = a
x a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a -> a
forall a. AbelianGroup a => a -> a
negate a
y
{-# SPECIALISE mkPolar :: Double -> Double -> Complex Double #-}
mkPolar :: (Floating a) => a -> a -> Complex a
mkPolar :: forall a. Floating a => a -> a -> Complex a
mkPolar a
r a
theta = a
r a -> a -> a
forall a. Semiring a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
cos a
theta a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
r a -> a -> a
forall a. Semiring a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sin a
theta
{-# SPECIALISE cis :: Double -> Complex Double #-}
cis :: (Floating a) => a -> Complex a
cis :: forall a. Floating a => a -> Complex a
cis a
theta = a -> a
forall a. Floating a => a -> a
cos a
theta a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a -> a
forall a. Floating a => a -> a
sin a
theta
{-# SPECIALISE polar :: Complex Double -> (Double,Double) #-}
polar :: (RealFloat a) => Complex a -> (a,a)
polar :: forall a. RealFloat a => Complex a -> (a, a)
polar Complex a
z = (Complex a -> a
forall a. Floating a => Complex a -> a
magnitude Complex a
z, Complex a -> a
forall a. RealFloat a => Complex a -> a
phase Complex a
z)