Portability | portable (?) |
---|---|

Stability | provisional |

Maintainer | numericprelude@henning-thielemann.de |

Complex numbers.

- data T a
- imaginaryUnit :: C a => T a
- fromReal :: C a => a -> T a
- (+:) :: a -> a -> T a
- (-:) :: C a => a -> a -> T a
- scale :: C a => a -> T a -> T a
- exp :: C a => T a -> T a
- quarterLeft :: C a => T a -> T a
- quarterRight :: C a => T a -> T a
- fromPolar :: C a => a -> a -> T a
- cis :: C a => a -> T a
- signum :: (C a, C a a, C a) => T a -> T a
- toPolar :: C a => T a -> (a, a)
- magnitude :: C a => T a -> a
- magnitudeSqr :: C a => T a -> a
- phase :: (C a, C a) => T a -> a
- conjugate :: C a => T a -> T a
- propPolar :: C a => T a -> Bool
- class C a => Power a where
- defltPow :: C a => Rational -> T a -> T a

# Cartesian form

Complex numbers are an algebraic type.

C T | |

C a b => C a (T b) | The '(*>)' method can't replace |

C a b => C a (T b) | |

(C a, Sqr a b) => C a (T b) | |

Sqr a b => Sqr a (T b) | |

(Ord a, C a v) => C a (T v) | |

(C a, C a v) => C a (T v) | |

(Show v, C v, C v, C a v) => C a (T v) | |

C a v => C a (T v) | |

Eq a => Eq (T a) | |

(C a, Eq a, Show a) => Fractional (T a) | |

(C a, Eq a, Show a) => Num (T a) | |

Read a => Read (T a) | |

Show a => Show (T a) | |

Arbitrary a => Arbitrary (T a) | |

Storable a => Storable (T a) | |

C a => C (T a) | |

C a => C (T a) | |

C a => C (T a) | |

C a => C (T a) | |

C a => C (T a) | |

(Ord a, C a) => C (T a) | |

(Ord a, C a, C a) => C (T a) | |

C a => C (T a) | |

(C a, C a, Power a) => C (T a) | |

(C a, C a, Power a) => C (T a) | |

Zero a => Zero (T a) |

imaginaryUnit :: C a => T aSource

quarterLeft :: C a => T a -> T aSource

Turn the point one quarter to the right.

quarterRight :: C a => T a -> T aSource

# Polar form

fromPolar :: C a => a -> a -> T aSource

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

magnitudeSqr :: C a => T a -> aSource

# Conjugate

# Properties

# Auxiliary classes

class C a => Power a whereSource

We like to build the Complex Algebraic instance
on top of the Algebraic instance of the scalar type.
This poses no problem to `sqrt`

.
However, `Number.Complex.root`

requires computing the complex argument
which is a transcendent operation.
In order to keep the type class dependencies clean
for more sophisticated algebraic number types,
we introduce a type class which actually performs the radix operation.