Claus Reinke claus.reinke at talk21.com
Fri Apr 15 19:46:00 EDT 2005

```Hi,

the difference is that you restrict your function to Int,
whereas the default type is Integer. See:

and

hth,
claus

btw, you can ask ghci to give you the type of each
expression you evaluate:

Prelude> :set +t

Prelude> 2^128
340282366920938463463374607431768211456
cmTypeOfName: it
it :: Integer

Prelude> 2^128 :: Int
0
cmTypeOfName: it
it :: Int

Prelude> maxBound :: Int
2147483647
cmTypeOfName: it
it :: Int
Prelude> maxBound :: Integer

<interactive>:1:0:
No instance for (Bounded Integer)
arising from use of `maxBound' at <interactive>:1:0-7
Probable fix: add an instance declaration for (Bounded Integer)
In the expression: maxBound :: Integer
In the definition of `it': it = maxBound :: Integer

----- Original Message -----
From: "ting wang" <tting.wang at gmail.com>
Sent: Saturday, April 16, 2005 12:03 AM

> Hello all,
> I am a new learner, and i am trying to write a function to calculate
> factorial of a natural number:
> (I use ghc 6.4, window xp)
> fac :: Int -> Int
> fac n
> | n == 0 = 1
> | n > 0 = fac (n-1) * n
> | otherwise = 0
> this works when n < 14 and result is 1278945280, when n > 14 the answer
> is not right n = 15 result is 2004310016. I know it is maybe because of
> overflow. So i calclate 2^32, 2^64, 2^128 the result correct and is much
> bigger as 14!,Why? 2^n use some big integer or my implementation of n!
> is not correct, I'm really confused.
>
> Someone can help me?
>
> Thanks
> Ting Wang
> _______________________________________________