OK, I understand that now but I've got a supplimentary question.

If I put:

instance Eq b => Eq (a -> b) where
    (==) = liftA2 (Prelude.==)

to do the Eq part I get another error:

    Couldn't match expected type `Bool'
           against inferred type `a -> Bool'
    In the expression: liftA2 (==)
    In the definition of `==': == = liftA2 (==)
    In the instance declaration for `Eq (a -> b)'

Now can someone please explain this?

I'm hoping that when I've understood this stuff I'll have made a small
step to understanding Haskell.

Thanks.


On 31 Oct, 23:38, Daniel Peebles <[email protected]> wrote:
> For some reason, Show and Eq are superclasses of Num (despite Num not
> actually using any of their methods), meaning that the compiler forces
> you to write instances of Eq and Show before it even lets you write a
> Num instance. I don't think anybody likes this, but I think we're
> stuck with it for the foreseeable future.
>
>
>
> On Sat, Oct 31, 2009 at 7:31 PM, b1g3ar5 <[email protected]> wrote:
> > I'm trying:
>
> > instance Num b => Num (a -> b) where
> > fromInteger = pure . Prelude.fromInteger
> > negate = fmap Prelude.negate
> > (+) = liftA2 (Prelude.+)
> > (*) = liftA2 (Prelude.*)
> > abs = fmap Prelude.abs
> > signum = fmap Prelude.signum
>
> > but the compiler rejects it with:
>
> > src\Main.hs:24:9:
> >    Could not deduce (Show (a -> b), Eq (a -> b))
> >      from the context (Num b)
> >      arising from the superclasses of an instance declaration
> >                   at src\Main.hs:24:9-29
> >    Possible fix:
> >      add (Show (a -> b), Eq (a -> b)) to the context of
> >        the instance declaration
> >      or add an instance declaration for (Show (a -> b), Eq (a -> b))
> >    In the instance declaration for `Num (a -> b)'
>
> > Could someone please explain this to me?
>
> > I thought that it might be that it couldn't work out the functions
> > necessary for (a->b) to be in the classes Show and Eq - so I tried
> > adding definitions for == ans show, but it made no difference.
>
> > Thanks
>
> > _______________________________________________
> > Haskell-Cafe mailing list
> > [email protected]
> >http://www.haskell.org/mailman/listinfo/haskell-cafe
>
> _______________________________________________
> Haskell-Cafe mailing list
> [email protected]http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to