yap-0.1: yet another prelude - a simplistic refactoring with algebraic classes

Portabilityportable
Stabilityprovisional
Maintainerlibraries@haskell.org

Data.YAP.Complex

Contents

Description

A version of Data.Complex, using the same type, but with less constrained operations. In particular this version permits Gaussian integers.

Synopsis

Rectangular form

data Complex a

Complex numbers are an algebraic type.

For a complex number z, abs z is a number with the magnitude of z, but oriented in the positive real direction, whereas signum z has the phase of z, but unit magnitude.

Constructors

!a :+ !a

forms a complex number from its real and imaginary rectangular components.

Instances

Typeable1 Complex 
Eq a => Eq (Complex a) 
RealFloat a => Floating (Complex a) 
RealFloat a => Fractional (Complex a) 
Data a => Data (Complex a) 
RealFloat a => Num (Complex a) 
Read a => Read (Complex a) 
Show a => Show (Complex a) 
RealFloat a => Field (Complex a)

RealFloat is used to do scaling to reduce the incidence of overflow.

Integral a => EuclideanDomain (Complex a)

Gaussian integers: if b is non-zero, the norm (squared magnitude) of mod a b is at most half that of b. Standard associates lie in the positive quadrant.

Ring a => Ring (Complex a) 
AbelianGroup a => AbelianGroup (Complex a) 
RealFloat a => Floating (Complex a) 
RealFloat a => Fractional (Complex a) 
RealFloat a => Num (Complex a) 

realPart :: Complex a -> aSource

Extracts the real part of a complex number.

imagPart :: Complex a -> aSource

Extracts the imaginary part of a complex number.

Polar form

mkPolar :: Floating a => a -> a -> Complex aSource

Form a complex number from polar components of magnitude and phase.

cis :: Floating a => a -> Complex aSource

cis t is a complex value with magnitude 1 and phase t (modulo 2*pi).

polar :: RealFloat a => Complex a -> (a, a)Source

The function polar takes a complex number and returns a (magnitude, phase) pair in canonical form: the magnitude is nonnegative, and the phase in the range (-pi, pi]; if the magnitude is zero, then so is the phase.

magnitude :: RealFloat a => Complex a -> aSource

The nonnegative magnitude of a complex number.

RealFloat is used to do scaling to reduce the incidence of overflow.

phase :: RealFloat a => Complex a -> aSource

The phase of a complex number, in the range (-pi, pi]. If the magnitude is zero, then so is the phase.

RealFloat is need for atan2.

Conjugate

conjugate :: AbelianGroup a => Complex a -> Complex aSource

The conjugate of a complex number.