## Abstract

Complex numbers parameterised over the representation of their real parts.

Divided into a module type for modules that implement complex numbers, and a parametric module that can construct such modules.

## Synopsis

module type complex = {
 type real type complex val mk : real -> real -> complex val mk_re : real -> complex val mk_im : real -> complex val conj : complex -> complex val re : complex -> real val im : complex -> real val mag : complex -> real val arg : complex -> real val + : complex -> complex -> complex val - : complex -> complex -> complex val * : complex -> complex -> complex val / : complex -> complex -> complex val sqrt : complex -> complex val exp : complex -> complex val log : complex -> complex
}
module mk_complex: (T: real) -> (complex with real = T.t with complex = (T.t, T.t))

## Description

module type complex

The type of modules that implement a notion of complex numbers. Semantically, a complex number can be seen as a pair of two numbers (but this need not be the representation).

type real

The type of the components of the complex number.

type complex

The type of complex numbers.

val mk: real -> real -> complex

Construct a complex number from real and imaginary components.

val mk_re: real -> complex

Construct a complex number from just the real component. The imaginary part will be zero.

val mk_im: real -> complex

Construct a complex number from just the imaginary component. The real part will be zero.

val conj: complex -> complex

Conjugate a complex number.

val re: complex -> real

The real part of a complex number.

val im: complex -> real

The imaginary part of a complex number.

val mag: complex -> real

The magnitude (or modulus, or absolute value) of a complex number.

val arg: complex -> real

The argument (or phase) of a complex number.

val +: complex -> complex -> complex
val -: complex -> complex -> complex
val *: complex -> complex -> complex
val /: complex -> complex -> complex
val sqrt: complex -> complex
val exp: complex -> complex
val log: complex -> complex
module mk_complex

Given a module describing a number type, construct a module implementing complex numbers.