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 | Safe |

Language | Haskell98 |

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 :: forall a. RealFloat a => a -> a -> Complex a
- pattern Real :: forall a. (Eq a, Num a) => a -> Complex a
- pattern Imaginary :: forall a. (Eq a, Num a) => a -> Complex a
- pattern Conjugate :: forall a. Num a => Complex a -> Complex a

# Documentation

_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.

`>>>`

20.0 :+ 40.0`(10.0 :+ 20.0) & _magnitude *~ 2`

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.

`>>>`

True`(mkPolar 10 (2-pi) & _phase +~ pi & view _phase) ≈ 2`

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`

.