+-- | Complex numbers are an algebraic type.
+--
+-- For a complex number @z@, @'abs' z@ is a number with the magnitude of @z@,
+-- but oriented in the positive real direction, whereas @'signum' z@
+-- has the phase of @z@, but unit magnitude.
+data (RealFloat a) => Complex a
+ = !a :+ !a -- ^ forms a complex number from its real and imaginary
+ -- rectangular components.
+# if __GLASGOW_HASKELL__
+ deriving (Eq, Show, Read, Data)
+# else
+ deriving (Eq, Show, Read)
+# endif