lens-4.5: Lenses, Folds and Traversals

Portabilitynon-portable
Stabilityexperimental
MaintainerEdward Kmett <ekmett@gmail.com>
Safe HaskellSafe-Inferred

Data.Complex.Lens

Description

Lenses and traversals for complex numbers

Synopsis

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 (-pi, pi]. The phase is always in that range when queried. So don't do that!

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