Yes, fromInteger and == is used for pattern matching on numbers. However, on GHC you can use -XNoImplicitPrelude to make it use whatever fromInteger and == that's in scope (without any Num or Eq).
Eg. if == is a method of MyEq class and fromInteger is a method of MyNum, and MyNum doesn't inherit MyEq, then the type of this function f 0 = "" f x = 'e' : f (x-1) Will be inferred as (MyEq a, MyNum a) => a -> String /Tobias -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of David Menendez Sent: den 19 november 2008 01:00 To: Henning Thielemann Cc: Haskell Cafe Subject: Re: [Haskell-cafe] Pattern matching on numbers? On Tue, Nov 18, 2008 at 6:56 PM, Henning Thielemann <[EMAIL PROTECTED]> wrote: > > On Tue, 18 Nov 2008, Ryan Ingram wrote: > >> How does this work? >> >>> fac n = case n of >>> 0 -> 1 >>> _ -> n * fac (n-1) >> >> ghci> :t fac >> fac :: (Num t) => t -> t >> >> The first line of "fac" pattern matches on 0. So how does this work >> over any value of the Num typeclass? I know that the "1" on the rhs >> of fac are replaced with (fromInteger 1), but what about numeric >> literals in patterns? Does it turn into a call to (==)? > > As far as I know, yes. It is even possible to trap into an error on > pattern matching this way if fromInteger generates an 'undefined'. As I understand it, the use of (==) in numeric pattern matching is why Num requires Eq. -- Dave Menendez <[EMAIL PROTECTED]> <http://www.eyrie.org/~zednenem/> _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
