[Haskell-cafe] Things to avoid (Was: Top 20 ``things'' to know in Haskell)

Iavor Diatchki iavor.diatchki at gmail.com
Fri Feb 11 12:58:43 EST 2005


On Fri, 11 Feb 2005 12:02:56 +0100, Thomas Jäger <thjaeger at gmail.com> wrote:
> iii) As a side effects of how n+k patterns work, each instance of the
> Num class must also be an instance of Eq, which of course doesn't make
> sense for all numeric types.

Well this is not entirely true.  I don't think 'n+k' patterns need
equality, but they need ordering
f (n + k) = e
is like:
f x | x > k = let n = x - k in e

Literal patterns need equality:
f 2 = e
is like:
f x | x == 2 = e

These do not force the 'Num' class to be a superclass of 'Ord' or
'Eq'.  If 'Num' was not a superclass of 'Eq', whenver you used a
literal pattern there would be an extra constraint that there should
be equality on the corresponding type. For example:
f 2 = "Hello"
would get the type:
f :: (Eq a, Num a) => a -> String

Hope this helps

More information about the Haskell-Cafe mailing list