Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Synopsis
- data Complex a
- realPart :: Complex a -> a
- imagPart :: Complex a -> a
- mkPolar :: Floating a => a -> a -> Complex a
- cis :: Floating a => a -> Complex a
- polar :: RealFloat a => Complex a -> (a, a)
- magnitude :: RealFloat a => Complex a -> a
- phase :: RealFloat a => Complex a -> a
- conjugate :: Num a => Complex a -> Complex a
- _realPart :: Functor f => (a -> f a) -> Complex a -> f (Complex a)
- _imagPart :: Functor f => (a -> f a) -> Complex a -> f (Complex a)
- _polar :: RealFloat a => Iso' (Complex a) (a, a)
- _magnitude :: RealFloat a => Lens' (Complex a) a
- _phase :: RealFloat a => Lens' (Complex a) a
- _conjugate :: RealFloat a => Iso' (Complex a) (Complex a)
Complex
Complex numbers are an algebraic type.
For a complex number z
,
is a number with the magnitude of abs
zz
,
but oriented in the positive real direction, whereas
has the phase of signum
zz
, but unit magnitude.
The Foldable
and Traversable
instances traverse the real part first.
Instances
mkPolar :: Floating a => a -> a -> Complex a #
Form a complex number from polar components of magnitude and phase.
Optics
_polar :: RealFloat a => Iso' (Complex a) (a, a) #
This isn't quite a legal Lens
. Notably the
view
l (set
l b a) = b
law is violated when you set a polar
value with 0 magnitude
and non-zero
phase
as the phase
information is lost, or with a negative magnitude
which flips the phase
and retains a positive magnitude
. So don't do
that!
Otherwise, this is a perfectly cromulent Lens
.
_magnitude :: RealFloat a => Lens' (Complex a) a #
Access the magnitude
of a Complex
number.
>>>
(10.0 :+ 20.0) & _magnitude *~ 2
20.0 :+ 40.0
This isn't quite a legal Lens
. Notably the
view
l (set
l b a) = b
law is violated when you set a negative magnitude
. This flips the phase
and retains a positive magnitude
. So don't do that!
Otherwise, this is a perfectly cromulent Lens
.
Setting the magnitude
of a zero Complex
number assumes the phase
is 0.
_phase :: RealFloat a => Lens' (Complex a) a #
Access the phase
of a Complex
number.
>>>
(mkPolar 10 (2-pi) & _phase +~ pi & view _phase) ≈ 2
True
This isn't quite a legal Lens
. Notably the
view
l (set
l b a) = b
law is violated when you set a phase
outside the range (-
.
The phase is always in that range when queried. So don't do that!pi
, pi
]
Otherwise, this is a perfectly cromulent Lens
.