| Copyright | (c) The University of Glasgow 2001 |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | libraries@haskell.org |
| Stability | provisional |
| Portability | portable |
| Safe Haskell | None |
| Language | Haskell2010 |
Data.YAP.Complex
Description
A version of Data.Complex, using the same type, but with less constrained operations. In particular this version permits Gaussian integers.
Synopsis
- data Complex a = !a :+ !a
- realPart :: Complex a -> a
- imagPart :: Complex a -> a
- mkPolar :: Floating a => a -> a -> Complex a
- cis :: Floating a => a -> Complex a
- polar :: RealFloat a => Complex a -> (a, a)
- magnitude :: Floating a => Complex a -> a
- phase :: RealFloat a => Complex a -> a
- conjugate :: AbelianGroup a => Complex a -> Complex a
Rectangular form
A data type representing complex numbers.
You can read about complex numbers on wikipedia.
In haskell, complex numbers are represented as a :+ b which can be thought of
as representing \(a + bi\). For a complex number z, is a number with the abs zmagnitude of z,
but oriented in the positive real direction, whereas
has the signum zphase of z, but unit magnitude.
Apart from the loss of precision due to IEEE754 floating point numbers,
it holds that z == .abs z * signum z
Note that Complex's instances inherit the deficiencies from the type
parameter's. For example, Complex Float's Ord instance has similar
problems to Float's.
As can be seen in the examples, the Foldable
and Traversable instances traverse the real part first.
Examples
>>>(5.0 :+ 2.5) + 6.511.5 :+ 2.5
>>>abs (1.0 :+ 1.0) - sqrt 2.00.0 :+ 0.0
>>>abs (signum (4.0 :+ 3.0))1.0 :+ 0.0
>>>foldr (:) [] (1 :+ 2)[1,2]
>>>mapM print (1 :+ 2)1 2
Constructors
| !a :+ !a infix 6 | forms a complex number from its real and imaginary rectangular components. |
Instances
| MonadFix Complex | Since: base-4.15.0.0 | ||||
Defined in Data.Complex | |||||
| MonadZip Complex | Since: base-4.15.0.0 | ||||
| Foldable Complex | Since: base-4.9.0.0 | ||||
Defined in Data.Complex Methods fold :: Monoid m => Complex m -> m # foldMap :: Monoid m => (a -> m) -> Complex a -> m # foldMap' :: Monoid m => (a -> m) -> Complex a -> m # foldr :: (a -> b -> b) -> b -> Complex a -> b # foldr' :: (a -> b -> b) -> b -> Complex a -> b # foldl :: (b -> a -> b) -> b -> Complex a -> b # foldl' :: (b -> a -> b) -> b -> Complex a -> b # foldr1 :: (a -> a -> a) -> Complex a -> a # foldl1 :: (a -> a -> a) -> Complex a -> a # elem :: Eq a => a -> Complex a -> Bool # maximum :: Ord a => Complex a -> a # minimum :: Ord a => Complex a -> a # | |||||
| Foldable1 Complex | Since: base-4.18.0.0 | ||||
Defined in Data.Foldable1 Methods fold1 :: Semigroup m => Complex m -> m # foldMap1 :: Semigroup m => (a -> m) -> Complex a -> m # foldMap1' :: Semigroup m => (a -> m) -> Complex a -> m # toNonEmpty :: Complex a -> NonEmpty a # maximum :: Ord a => Complex a -> a # minimum :: Ord a => Complex a -> a # foldrMap1 :: (a -> b) -> (a -> b -> b) -> Complex a -> b # foldlMap1' :: (a -> b) -> (b -> a -> b) -> Complex a -> b # foldlMap1 :: (a -> b) -> (b -> a -> b) -> Complex a -> b # foldrMap1' :: (a -> b) -> (a -> b -> b) -> Complex a -> b # | |||||
| Eq1 Complex |
Since: base-4.16.0.0 | ||||
| Read1 Complex |
Since: base-4.16.0.0 | ||||
Defined in Data.Functor.Classes | |||||
| Show1 Complex |
Since: base-4.16.0.0 | ||||
| Traversable Complex | Since: base-4.9.0.0 | ||||
| Applicative Complex | Since: base-4.9.0.0 | ||||
| Functor Complex | Since: base-4.9.0.0 | ||||
| Monad Complex | Since: base-4.9.0.0 | ||||
| Generic1 Complex | |||||
Defined in Data.Complex Associated Types
| |||||
| Data a => Data (Complex a) | Since: base-2.1 | ||||
Defined in Data.Complex Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Complex a -> c (Complex a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Complex a) # toConstr :: Complex a -> Constr # dataTypeOf :: Complex a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Complex a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Complex a)) # gmapT :: (forall b. Data b => b -> b) -> Complex a -> Complex a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Complex a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Complex a -> r # gmapQ :: (forall d. Data d => d -> u) -> Complex a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Complex a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Complex a -> m (Complex a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Complex a -> m (Complex a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Complex a -> m (Complex a) # | |||||
| Storable a => Storable (Complex a) | Since: base-4.8.0.0 | ||||
Defined in Data.Complex | |||||
| RealFloat a => Floating (Complex a) | Since: base-2.1 | ||||
Defined in Data.Complex Methods exp :: Complex a -> Complex a # log :: Complex a -> Complex a # sqrt :: Complex a -> Complex a # (**) :: Complex a -> Complex a -> Complex a # logBase :: Complex a -> Complex a -> Complex a # sin :: Complex a -> Complex a # cos :: Complex a -> Complex a # tan :: Complex a -> Complex a # asin :: Complex a -> Complex a # acos :: Complex a -> Complex a # atan :: Complex a -> Complex a # sinh :: Complex a -> Complex a # cosh :: Complex a -> Complex a # tanh :: Complex a -> Complex a # asinh :: Complex a -> Complex a # acosh :: Complex a -> Complex a # atanh :: Complex a -> Complex a # log1p :: Complex a -> Complex a # expm1 :: Complex a -> Complex a # | |||||
| Generic (Complex a) | |||||
Defined in Data.Complex Associated Types
| |||||
| RealFloat a => Num (Complex a) | Since: base-2.1 | ||||
| Read a => Read (Complex a) | Since: base-2.1 | ||||
| RealFloat a => Fractional (Complex a) | Since: base-2.1 | ||||
| Show a => Show (Complex a) | Since: base-2.1 | ||||
| Eq a => Eq (Complex a) | Since: base-2.1 | ||||
| AbelianGroup a => AbelianGroup (Complex a) Source # | |||||
| AdditiveMonoid a => AdditiveMonoid (Complex a) Source # | |||||
| Field a => DivisionRing (Complex a) Source # | |||||
Defined in Data.YAP.Algebra.Internal | |||||
| Field a => DivisionSemiring (Complex a) Source # | |||||
| (Ring a, ToInteger a) => Euclidean (Complex a) Source # | Gaussian integers:
if | ||||
| Field a => Field (Complex a) Source # | |||||
Defined in Data.YAP.Algebra.Internal | |||||
| RealFloat a => Floating (Complex a) Source # | As in Data.Complex. | ||||
Defined in Data.YAP.Algebra.Internal Methods exp :: Complex a -> Complex a Source # log :: Complex a -> Complex a Source # sqrt :: Complex a -> Complex a Source # (**) :: Complex a -> Complex a -> Complex a Source # logBase :: Complex a -> Complex a -> Complex a Source # sin :: Complex a -> Complex a Source # cos :: Complex a -> Complex a Source # tan :: Complex a -> Complex a Source # asin :: Complex a -> Complex a Source # acos :: Complex a -> Complex a Source # atan :: Complex a -> Complex a Source # sinh :: Complex a -> Complex a Source # cosh :: Complex a -> Complex a Source # tanh :: Complex a -> Complex a Source # asinh :: Complex a -> Complex a Source # | |||||
| RealFloat a => Fractional (Complex a) Source # | As in Data.Complex. | ||||
Defined in Data.YAP.Algebra.Internal | |||||
| FromRational a => FromRational (Complex a) Source # | |||||
Defined in Data.YAP.Algebra.Internal Methods fromRational :: Rational -> Complex a Source # | |||||
| RealFloat a => Num (Complex a) Source # | As in Data.Complex. | ||||
| Ring a => Ring (Complex a) Source # | |||||
Defined in Data.YAP.Algebra.Internal Methods fromInteger :: Integer -> Complex a Source # | |||||
| Field a => Semifield (Complex a) Source # | |||||
| Ring a => Semiring (Complex a) Source # | |||||
| (Ring a, ToInteger a) => StandardAssociate (Complex a) Source # | Gaussian integers: units have magnitude 1; standard associates are natural numbers or in the positive quadrant. | ||||
| type Rep1 Complex | Since: base-4.9.0.0 | ||||
Defined in Data.Complex type Rep1 Complex = D1 ('MetaData "Complex" "Data.Complex" "base" 'False) (C1 ('MetaCons ":+" ('InfixI 'NotAssociative 6) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) Par1)) | |||||
| type Rep (Complex a) | Since: base-4.9.0.0 | ||||
Defined in Data.Complex type Rep (Complex a) = D1 ('MetaData "Complex" "Data.Complex" "base" 'False) (C1 ('MetaCons ":+" ('InfixI 'NotAssociative 6) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 a))) | |||||
Polar form
mkPolar :: Floating a => a -> a -> Complex a Source #
Form a complex number from polar components of magnitude and phase.