Re: [Haskell-cafe] Confused by ghci output

2012-05-31 Thread wren ng thornton
On 5/31/12 12:48 PM, Lorenzo Bolla wrote: It looks like you are overflowing `Int` with 3^40. In your QuickCheck test, the function signature uses Int: +1. I was bitten by this issue recently as well. When playing around with properties and debugging in GHCi, always beware of type defaulting t

Re: [Haskell-cafe] Confused by ghci output

2012-05-31 Thread Clark Gaebel
The cafe is certainly responsive today! Thanks everyone - got it. Integer overflow ;) Regards, - Clark ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

Re: [Haskell-cafe] Confused by ghci output

2012-05-31 Thread Lorenzo Bolla
It looks like you are overflowing `Int` with 3^40. In your QuickCheck test, the function signature uses Int: prop_sanemodexp :: Int -> Int -> Int -> Property Note: Prelude> 3^40 12157665459056928801 Prelude> 3^40 :: Int 689956897 Prelude> 3^40 `mod` 3 0 Prelude> (3^40 `mod` 3) :: Int 1 L.

Re: [Haskell-cafe] Confused by ghci output

2012-05-31 Thread Sean Leather
On Thu, May 31, 2012 at 6:35 PM, Clark Gaebel wrote: > *X> 3^40 `mod` 3 == modexp2 3 40 3 > False > *X> modexp2 3 40 3 > 0 > *X> 3^40 `mod` 3 > 0 > *X> 3^40 `mod` 3 :: Int 1 *X> 3^40 `mod` 3 :: Integer 0 I'm confused. Last I checked, 0 == 0. > Yes, but 3^40 /= 3^40 when you have arithmetic over

Re: [Haskell-cafe] Confused by ghci output

2012-05-31 Thread Simon Hengel
ghci> 3^40 `mod` 3 :: Int 2 Cheers, Simon ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

Re: [Haskell-cafe] Confused by ghci output

2012-05-31 Thread Clark Gaebel
Wow, thanks! That was subtle. - Clark On Thu, May 31, 2012 at 12:49 PM, Claude Heiland-Allen wrote: > Hi Clark, > > ghci is defaulting to Integer > modexp2 forces Int > Int overflows with 3^40 > > > On 31/05/12 17:35, Clark Gaebel wrote: > >> *X> 3^40 `mod` 3 == modexp2 3 40 3 >> False >> > >

Re: [Haskell-cafe] Confused by ghci output

2012-05-31 Thread Kevin Charter
Hi Clark, On Thu, May 31, 2012 at 10:35 AM, Clark Gaebel wrote: > *X> 3^40 `mod` 3 == modexp2 3 40 3 > False > *X> modexp2 3 40 3 > 0 > *X> 3^40 `mod` 3 > 0 > > I'm confused. Last I checked, 0 == 0. > Your HPaste shows the type of modexp2 is Int -> Int -> Int -> Int, so ghci will infer that (3^

Re: [Haskell-cafe] Confused by ghci output

2012-05-31 Thread Ertugrul Söylemez
Clark Gaebel wrote: > *X> 3^40 `mod` 3 == modexp2 3 40 3 > False > *X> modexp2 3 40 3 > 0 > *X> 3^40 `mod` 3 > 0 > > I'm confused. Last I checked, 0 == 0. This has to do with types: > 3^40 `mod` 3 0 > 3^40 `mod` 3 :: Int 2 When doing number theory always use Integer. Greets,

Re: [Haskell-cafe] Confused by ghci output

2012-05-31 Thread Claude Heiland-Allen
Hi Clark, ghci is defaulting to Integer modexp2 forces Int Int overflows with 3^40 On 31/05/12 17:35, Clark Gaebel wrote: *X> 3^40 `mod` 3 == modexp2 3 40 3 False *X> fromInteger (3^40 `mod` 3) == modexp2 3 40 3 True *X> modexp2 3 40 3 0 *X> 3^40 `mod` 3 0 *X> 3^40 `mod` 3 ::Int 2 I'

[Haskell-cafe] Confused by ghci output

2012-05-31 Thread Clark Gaebel
*X> 3^40 `mod` 3 == modexp2 3 40 3 False *X> modexp2 3 40 3 0 *X> 3^40 `mod` 3 0 I'm confused. Last I checked, 0 == 0. Using GHC 7.4.1, and the file x.hs (which has been loaded in ghci) can be found here: http://hpaste.org/69342 I noticed this after prop_sanemodexp was failing. Any help would b