lens-5.2.3: Lenses, Folds and Traversals
Copyright(C) 2012-16 Edward Kmett
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Complex.Lens

Description

Lenses and traversals for complex numbers

Synopsis

Documentation

_realPart :: forall a f. Functor f => (a -> f a) -> Complex a -> f (Complex a) Source #

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 :: forall a f. Functor f => (a -> f a) -> Complex a -> f (Complex a) Source #

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) a Source #

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 Source #

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

Pattern Synonyms

pattern Polar :: RealFloat a => a -> a -> Complex a Source #

pattern Real :: (Eq a, Num a) => a -> Complex a Source #

pattern Imaginary :: (Eq a, Num a) => a -> Complex a Source #

pattern Conjugate :: Num a => Complex a -> Complex a Source #