Data.Complex.Lens

lens-4.13.2.1: Lenses, Folds and Traversals

Copyright | (C) 2012-16 Edward Kmett
License | BSD-style (see the file LICENSE)
Maintainer | Edward Kmett <ekmett@gmail.com>
Stability | experimental
Portability | non-portable
Safe Haskell | None
Language | Haskell98

Data.Complex.Lens

Contents

- Pattern Synonyms

Description

Lenses and traversals for complex numbers

Synopsis

- _realPart :: Lens' (Complex a) a
- _imagPart :: Lens' (Complex a) 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)
- pattern Polar :: () => RealFloat t => t -> t -> Complex t
- pattern Real :: () => (Eq a, Num a) => a -> Complex a
- pattern Imaginary :: () => (Eq a, Num a) => a -> Complex a
- pattern Conjugate :: () => Num a => Complex a -> Complex a

# Documentation

_realPart :: Lens' (Complex a) a

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

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)

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 `(-`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)

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 t => t -> t -> Complex t

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

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

pattern Conjugate :: () => Num a => Complex a -> Complex a