invertible-0.1: Data/Invertible/Complex.hs
-- |
-- Bidirectional version of "Data.Complex".
{-# LANGUAGE Safe #-}
module Data.Invertible.Complex
( complex
, polar
, conjugate
) where
import qualified Data.Complex as C
import Data.Invertible.Bijection
import Data.Invertible.Internal
import Data.Invertible.TH
-- |Convert between 'Complex' numbers and rectangular form.
complex :: (a, a) <-> C.Complex a
complex = [biCase|(r, i) <-> r C.:+ i|]
-- |Convert between complex numbers and 'C.polar' form.
polar :: RealFloat a => (a, a) <-> C.Complex a
polar = uncurry C.mkPolar :<->: C.polar
-- |The 'C.conjugate' of a complex number.
conjugate :: Num a => C.Complex a <-> C.Complex a
conjugate = involution C.conjugate