Class Question

Johan Baltié johan.baltie@epita.fr
Thu, 23 Jan 2003 07:55:57 +0100


Le Jeudi 23 Janvier 2003 06:40, Matthew Donadio a écrit :
> Hi all,
>
> I have yet another question.  I think I have too much time on my hands.
>
> I have two functions:
> > rf     :: (RealFloat a, Integral b) => [a] -> b -> Complex a
> > rf x k = ...
> >
> > cf     :: (RealFloat a, Integral b) => [Complex a] -> b -> Complex =
a
> > cf x k = ...
>
> I would like to add these to the class system so I can create an
> overloaded version, f.
>
> From my understanding of the Report, the following should work, but I
> get an error, which I really don't understand.
>
> > class (Fractional a) => Floating a where
> >     f :: (Integral b) => [a] -> b -> a
> >
> > instance (RealFloat a) => Floating a where
> >     f x k = rf x k
> >
> > instance (RealFloat a) => Floating (Complex a) where
> >     f x k = cf x k
>
> hugs98 spits out
>
> 	ERROR "f.lhs":59 - Syntax error in instance head (constructor
> expected)
>
> where line 59 is the first instance declaration.  Can anyone give me
> some guidance, or hints, here?
>
> Thanks a million.

On the first "instance" you're trying to instantiate "any type a that is a 
instance of RealFloat". 
AFAIK you can instantiate only "real" data types like "Complex a". (sorry for 
the "real" that is not the good term, but I'm just waking up :) )

-- 
Ciao

Jo