Re: Odd side effect of using chr

Gavin Lowe <[email protected]>
Newsgroups gmane.comp.lang.haskell.hugs.bugs
Message-ID <[email protected]>
I think I see what's going on.  

  Prelude> :t f where f n = snd( chr n , n^25 `mod` 18721 )
  let {...} in f :: Int -> Int
  Prelude> :t g where g n =  n^25 `mod` 18721
  let {...} in g :: Integral a => a -> a

In the case of f, the use of chr forces n to be an Int, so it's calculating
n^25 as an Int, which is 0 (because of arithmetic overflow).  In the case
of g, it's presumably using Integer, so gets the correct answer.

Writing

  Prelude> let f n = snd( chr n , fromInt n^25 `mod` 18721 ) in f 4

gives the right answer.

Gavin

> >From gavinl  Mon Jan  6 15:34:20 2003
> Date: Mon, 6 Jan 2003 15:34:19 GMT
> X-Authentication-Warning: client104.comlab: gavinl set sender to [email protected] using -f
> From: Gavin Lowe <[email protected]>
> CC: [email protected]
> Reply-to: [email protected]
> 
> Hi
> 
> I think this is a hugs bug.
> 
> If I calculate
> 
>   Prelude> let g n =  n^25 `mod` 18721  in g 4
> 
> I get
> 
>   17173
> 
> But then if I calculate
> 
>   Prelude> let f n = snd( chr n, n^25 `mod` 18721 ) in f 4
> 
> I get
> 
>   0
> 
> Which is different!  I think the former is correct, FWIW.  Replacing the
> "chr n" by something not involving chr and n gives 17173.
> 
> This is with Hugs Version December 2001, running on a SunBlade 100 with
> Solaris 9.
> 
> Gavin
> 
> --
> Gavin Lowe
> 
> Oxford University Computing Laboratory, Parks Road, Oxford, OX1 3QD.
> Phone: +44 1865 273841.  Fax: +44 1865 273839.
> E-mail: [email protected]
> 
> The secret of all discoverers is that they regard nothing as impossible
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.