rings-0.0.2.2: src/Data/Complex/Instance.hs
module Data.Complex.Instance where
import Data.Complex
import Data.Semiring
import Data.Group
import Data.Ring
import Prelude hiding (negate, fromInteger)
instance Semigroup a => Semigroup (Complex a) where
(x :+ y) <> (x' :+ y') = (x <> x') :+ (y <> y')
{-# INLINE (<>) #-}
instance Monoid a => Monoid (Complex a) where
mempty = mempty :+ mempty
instance Group a => Group (Complex a) where
negate (x :+ y) = negate x :+ negate y
{-# INLINE negate #-}
instance (Group a, Semiring a) => Semiring (Complex a) where
(x :+ y) >< (x' :+ y') = (x >< x' << y >< y') :+ (x >< y' <> y >< x')
{-# INLINE (><) #-}
fromBoolean False = mempty
fromBoolean True = fromBoolean True :+ mempty
{-# INLINE fromBoolean #-}
instance Ring a => Ring (Complex a) where
fromInteger x = fromInteger x :+ mempty
{-# INLINE fromInteger #-}