[Haskell-cafe] Newcomers question

Daniel Peebles pumpkingod at gmail.com
Sat Oct 31 19:38:38 EDT 2009


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.straw 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-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>


More information about the Haskell-Cafe mailing list