> > >   Fail: Prelude.chr: bad argument
> >
> > nofib/real/compress2 fails with the same message, for us.
> > We haven't investigated.  Perhaps it's the same bug.
> 
> With a quick grep through the two programs, my guess is that 'toEnum'
> is being specialised at type Char to an internal function 'chr', and
> that the implementation of 'chr' only converts Ints up to some limit
> like 128.  (Both programs apply toEnum to Ints in the range 
> 128<c<256.)
> 
> If this is the case, it should be easy to fix.

This is our chr:

        chr :: Int -> Char
        chr (I# i) | i >=# 0# && i <=# 255# = C# (chr# i)
                   | otherwise = error ("Prelude.chr: bad argument")

so it's not a problem with the 128--255 range.  I plan to track down the
same message in compress2 using the profiler: you can get a stack trace at
the point where the exception is thrown now.  You might like to try this
with NHC too.

Cheers,
        Simon


Reply via email to