[Haskell-cafe] Re: Newcomers question

b1g3ar5 nick.straw at gmail.com
Sun Nov 1 11:09:14 EST 2009


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 <pumpkin... at gmail.com> 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 <nick.st... at gmail.com> 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
> > Haskell-C... at haskell.org
> >http://www.haskell.org/mailman/listinfo/haskell-cafe
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-C... at haskell.orghttp://www.haskell.org/mailman/listinfo/haskell-cafe


More information about the Haskell-Cafe mailing list