update maintainer email
[complex-generic:complex-generic.git] / Data / Complex / Generic / Class.hs
1 {-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}
2 {- |
3 Module      :  Data.Complex.Generic.Class
4 Copyright   :  (c) Claude Heiland-Allen 2012
5 License     :  BSD3
6
7 Maintainer  :  claude@mathr.co.uk
8 Stability   :  unstable
9 Portability :  MultiParamTypeClasses, FunctionalDependencies
10
11 Classes for complex number operations.
12 -}
13 module Data.Complex.Generic.Class where
14
15 -- | Rectangular form.
16 class ComplexRect c r | c -> r where
17   -- | Construction.
18   mkRect :: r {- ^ real -} -> r {- ^ imaginary -} -> c
19   -- | Construction with imagPart 0.
20   real :: r {- ^ real -} -> c
21   -- | Construction with realPart 0.
22   imag :: r {- ^ imaginary -} -> c
23   -- | Deconstruction.
24   rect :: c -> (r, r)
25   -- | Get the real part.
26   realPart :: c -> r
27   -- | Get the imaginary part.
28   imagPart :: c -> r
29   -- | Conjugation.
30   conjugate :: c -> c
31   -- | Squared magnitude.
32   magnitudeSquared :: c -> r
33   -- | Complex square.
34   sqr :: c -> c
35   -- | Real-complex multiplication.
36   (.*) :: r -> c -> c
37   infixl 7 .*
38   -- | Complex-real multiplication.
39   (*.) :: c -> r -> c
40   infixl 7 *.
41
42 -- | Complex-real division.
43 (/.) :: (Fractional r, ComplexRect c r) => c -> r -> c
44 z /. a = z *. recip a
45 infixl 6 /.
46
47 -- | A synonym for 'mkRect'.
48 (.+) :: ComplexRect c r => r -> r -> c
49 (.+) = mkRect
50 infix 6 .+
51
52 -- | Polar form.
53 class ComplexPolar c r | c -> r where
54   -- Construction.
55   mkPolar :: r -> r -> c
56   -- Construction with magnitude 1.
57   cis :: r -> c
58   -- Deconstruction.
59   polar :: c -> (r, r)
60   -- | Magnitude.
61   magnitude :: c -> r
62   -- | Phase in (-pi, pi].
63   phase :: c -> r