Recently I took a look at Haskell, using LYAH.
I was messing around with type classes and wrote this quick test function:
foo :: (Num x) => x ->
Haskell, both 98 and 2010 both require all instances of Num to also be instances on Show and Eq. This is largely an accident of history.
GHC, the most popular Haskell compiler, diverges from the standard here without requiring any pragma. This was done to allow applicative functors to be instances of Num and enjoy the benefits of overloaded syntax.
It used to be that an instance of Num
was also an instance of Show
and Eq
, but that's no longer the case.
You'll need to add a Show
constraint as well.
The information in LYAH is old. The release notes for GHC 7.4.1 say that:
The Num class no longer has Eq or Show superclasses.
You will need to write,
foo :: (Num x, Show x) => x -> String
(In fact, the foo
you wrote doesn't require Num x
, so you can omit that to avoid an unnecessary constraint.)
Shouldn't you write:
(Num x) => x -> String
Instead of
(Num x) x -> String
And as far as I know this inheritance is at least outdated.