--------------------------------------------------------------------------------
-- |
-- Module      :  Complextra
-- Copyright   :  (c) 2017 Jeffrey Rosenbluth
-- License     :  BSD-style (see LICENSE)
-- Maintainer  :  jeffrey.rosenbluth@gmail.com
--
-- Utility functions for dealing with complex numbers.
--------------------------------------------------------------------------------

module Complextra
  ( scaleZ
  , (.*^)
  , im
  ) where

import           Data.Complex

-- | Multiply a complex number by a real number.
scaleZ :: RealFloat a => a -> Complex a -> Complex a
scaleZ k z = (k :+ 0) * z

-- | Infix form of 'scaleZ'.
(.*^) :: RealFloat a => a -> Complex a -> Complex a
(.*^) = scaleZ
infixl 7 .*^

-- | The square root of -1, i.e. i.
im :: Num a => Complex a
im = 0 :+ 1