%**The Haskell 98 Library Report: Complex Numbers
%**~header
\section{Complex Numbers}
\label{lib-num}
\outline{
\inputHS{lib-hdrs/Complex}
}
Complex numbers are an algebraic type.
The constructor @(:+)@\indextt{:+} forms a complex number from its
real and imaginary rectangular components. This constructor is
strict: if either the real part or the imaginary part of the number is
$\bot$, the entire number is $\bot$. A complex number may also
be formed from polar components of magnitude and phase by the function
@mkPolar@\indextt{mkPolar}. The function @cis@\indextt{polar}
produces a complex number from an angle "t".
Put another way, @cis@ "t" is a complex value with magnitude "1"
and phase "t" (modulo "2\pi").
The function @polar@\indextt{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.
The functions @realPart@\indextt{realPart} and
@imagPart@\indextt{imagPart} extract the rectangular components of a
complex number and the functions @magnitude@\indextt{magnitude} and
@phase@\indextt{phase} extract the polar components of a complex
number. The function @conjugate@\indextt{conjugate} computes the
conjugate of a complex number in the usual way.
The magnitude and sign of a complex number are defined as follows:
\bprog
@
abs z = magnitude z :+ 0
signum 0 = 0
signum z@@(x:+y) = x/r :+ y/r where r = magnitude z
@
\eprog
That is, @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.
\subsection{Library {\tt Complex}}
\inputHS{lib-code/Complex}
%**~footer