[Haskell-cafe] Ignorant begginer question

Jon Fairbairn Jon.Fairbairn at cl.cam.ac.uk
Thu Dec 23 12:56:56 EST 2004


On 2004-12-23 at 15:09-0200 =?ISO-8859-1?Q?Maur=EDcio?= wrote:
>    Guys,
> 
>    What is wrong with this code?
> 
> **************
> import Complex
> roots :: (Complex, Complex, Complex) -> (Complex, Complex);
> roots (a,b,c) = (x1,x2) where { x1 = (b*b + (sqrt_delta))/(2*a); x2 = 
> (b*b - (sqrt_delta))/(2*a); sqrt_delta = sqrt 4*a*c}
> **************
> 
>    I load it into GHCi and get:
> 
> **************
> Kind error: `Complex' is not applied to enough type arguments

That means what it says: Complex takes an argument, namely
the type for the real and imaginary parts.  You need to
choose from Float, Double or some RealFloat.

Try this in ghci:

   Prelude> :m Complex
   Prelude Complex> :info Complex
   -- Complex is a type constructor
   data (RealFloat a) => Complex a = (:+) !a !a

and then

> type Compl = Complex Double
> roots :: (Compl, Compl, Compl) -> (Compl, Compl)

-- 
Jón Fairbairn                                 Jon.Fairbairn at cl.cam.ac.uk




More information about the Haskell-Cafe mailing list