Portability | non-portable |
---|---|
Stability | experimental |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Safe Haskell | None |
Data.Complex.Lens
Description
Lenses and traversals for complex numbers
Documentation
_realPart :: Lens' (Complex a) aSource
Access the realPart
of a Complex
number.
>>>
(a :+ b)^._realPart
a
>>>
a :+ b & _realPart *~ 2
a * 2 :+ b
_realPart
::Functor
f => (a -> f a) ->Complex
a -> f (Complex
a)
_imagPart :: Lens' (Complex a) aSource
Access the imagPart
of a Complex
number.
>>>
(a :+ b)^._imagPart
b
>>>
a :+ b & _imagPart *~ 2
a :+ b * 2
_imagPart
::Functor
f => (a -> f a) ->Complex
a -> f (Complex
a)
_polar :: RealFloat a => Iso' (Complex a) (a, a)Source
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) aSource
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) aSource
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
.
_conjugate :: RealFloat a => Iso' (Complex a) (Complex a)Source
Access the conjugate
of a Complex
number.
>>>
(2.0 :+ 3.0) & _conjugate . _imagPart -~ 1
2.0 :+ 4.0
>>>
(mkPolar 10.0 2.0 ^. _conjugate . _phase) ≈ (-2.0)
True