On Sat, 31 Oct 2009, b1g3ar5 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.
You have to define instances for Show and Eq, that is methods 'show' and
(==), because the Num class has these classes as superclasses. This has
been criticised a lot and is e.g. not the case in NumericPrelude. However,
I would not seriously define a Num instance for functions:
http://www.haskell.org/haskellwiki/Num_instance_for_functions
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe