[Haskell-cafe] Pattern matching on numbers?
tobias.bexelius at avalanchestudios.se
Wed Nov 19 06:01:03 EST 2008
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
From: haskell-cafe-bounces at haskell.org
[mailto:haskell-cafe-bounces at haskell.org] 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
<lemming at henning-thielemann.de> 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 <dave at zednenem.com>
Haskell-Cafe mailing list
Haskell-Cafe at haskell.org
More information about the Haskell-Cafe