Copyright | (c) Galois Inc 2014-2020 |
---|---|

License | BSD3 |

Maintainer | Joe Hendrix <jhendrix@galois.com> |

Stability | provisional |

Safe Haskell | Safe-Inferred |

Language | Haskell2010 |

This module provides complex numbers without the RealFloat constraints that Data.Complex has. This is useful for representing various intermediate symbolic representations of complex numbers that are not literally number representations.

## Synopsis

- data Complex a = !a :+ !a
- realPart :: Complex a -> a
- imagPart :: Complex a -> a
- magnitude :: Floating a => Complex a -> a
- magnitudeSq :: Num a => Complex a -> a
- complexNegate :: Num a => Complex a -> Complex a
- complexAdd :: Num a => Complex a -> Complex a -> Complex a
- complexSub :: Num a => Complex a -> Complex a -> Complex a
- complexMul :: Num a => Complex a -> Complex a -> Complex a
- complexDiv :: Fractional a => Complex a -> Complex a -> Complex a
- complexRecip :: Fractional a => Complex a -> Complex a
- tryComplexSqrt :: (Ord a, Fractional a, Monad m) => (a -> m a) -> Complex a -> m (Complex a)
- tryMagnitude :: Num a => (a -> b) -> Complex a -> b
- complexAsRational :: Complex Rational -> Maybe Rational

# Documentation

A complex pair over an arbitrary type.

!a :+ !a infix 6 |

#### Instances

magnitudeSq :: Num a => Complex a -> a Source #

Returns square of magnitude.

complexDiv :: Fractional a => Complex a -> Complex a -> Complex a Source #

complexRecip :: Fractional a => Complex a -> Complex a Source #

:: (Ord a, Fractional a, Monad m) | |

=> (a -> m a) | Square-root function defined for non-negative values a. |

-> Complex a | |

-> m (Complex a) |