Odd side effect of using chr

Malcolm Wallace Malcolm.Wallace@cs.york.ac.uk
Mon, 6 Jan 2003 15:42:26 +0000


Gavin Lowe <gavin.lowe@comlab.ox.ac.uk> writes:

> I think this is a hugs bug.

It isn't.  You will get the same behaviour in nhc98 and ghc.

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

The problem is with type-defaults for overloaded numbers.  In the
first example, n is inferred to be of type
    n :: Integral a => a
which is defaulted to Integer.  In the second example, because the
type of chr is
    chr :: Int -> Char
the type of n is inferred as Int, which cannot represent the value 4^25.

Regards,
    Malcolm