Help need "Cannot use type synonym in instance head"
Jon Cast
jcast@ou.edu
Sun, 14 Apr 2002 15:09:17 -0500
Please keep this on the list, so everyone can benefit.
Benny <neon_2001@hotmail.com> wrote:
> Hello Jon
> Thanks for the help. But it still didn't work after I changed the
> codes from:
> > type Poly = [Float]
> > addPoly::Poly->Poly->Poly
> > addPoly x y = zipWith (+) x y
> > instance (Float a) => Num (Poly a) where
> > (+) = addPoly
> to your suggestion:
> type Poly = [Float]
> addPoly::Poly->Poly->Poly
> addPoly x y = zipWith (+) x y
> instance Num [Float] where
> (+) = addPoly
> I received this erreor message "Syntax error in instance head
> (variable expected)".
I sent this suggestion without actually trying it; unfortunately, as
you discovered, it violates the rules of the Haskell 98 language.
Please disregard this suggestion.
> Then I tried your second suggestion, so I changed to codes to:
> type Poly = [Float]
> newtype Poly = Poly [Float]
> addPoly::Poly->Poly->Poly
> addPoly (Poly x) (Poly y) = Poly (zipWith (+) x y)
> instance (Float a) => Num (Poly a) where
> (+) = addPoly
> Then I received this error message " Repeated definition of type
> constructor "Poly"".
What I meant was the following:
> newtype Poly = Poly [Float]
> addPoly::Poly->Poly->Poly
> addPoly (Poly x) (Poly y) = Poly (zipWith (+) x y)
> instance Num Poly where
> (+) = addPoly
I.e., delete the type declaration as well as the extraneous
information from the instance.
<snip>
Btw., you'll also want instances of Eq and Show to get Num to go through.
> Thank you very much
You're welcome
> Cheers
> Benny
Jon Cast