ghc's Int is 32-bit on 32-bit platforms, according to maxBound. On Mon, 21 Jan 2013 02:26:34 +0100 Benoit T <benoit.triq...@gmail.com> wrote:
> On Mon, Jan 21, 2013 at 01:17:17AM +0200, mip...@meta.ua wrote: > > The program looks like this: > > > > --*********************** > > factorial :: Int->Int > > factorial n = product [1..n] > > > > main = do > > print $ factorial 50 > > --*********************** > > > > And that yields "0" (no errors). Is it a bug or feature? :) > > Int is fixed-size (*) and is expected to use modular arithmetics (**) > therefore there is no notion of overflow, it just computes modulo > maxBound::Int > > You must have been using a 32-bit haskell, that uses full-word Int, > such as HUGS, and it turns out that using 32-bit signed integers, you > eventually get -2**31 (this happens for n==32) and then multiplying by > any even integer yields 0 (34!==0). > > GHC uses 31-bit or 63-bit Int (on 32- or 64-bit arch) and does not > encounter this case before factorial 50 (however the answer is also > not what you may have been expecting because it still doesn't fit). > > cheers > > *: this is specified in the standard > **: this does not seem to be specified in the standard > _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell