logo       

RE: Unboxed integers: msg#00041

lang.haskell.glasgow.bugs

Subject: RE: Unboxed integers

On 14 February 2005 19:13, Iavor Diatchki wrote:

> There is something strange that is going on with unboxed types in GHC
> (6.2). I think it is a bug, but perhaps I am missing something. If
> so, I am quite curious as to what is going on. Here is the example:
>
>> import GHC.Exts
>
> First we define a function that will give us the bottom element of
> the unboxed integers.
>
>> bot :: () -> Int#
>> bot () = bot ()
>
> Now we can define a function that will "check" if we have bottom or
> not,
> by terminating or not.
>
>> stops :: Int# -> Bool
>> stops _ = True
>>
>> test1 :: Bool
>> test1 = stops (bot ())
>
> As expected (by me), 'test1' does not terminate --- to unbox values
> we have to be strict in them. So far everything makes sense.
> However if we simply make 'stops' into a local function, it starts
> terminating:
>
>> test2 :: Bool
>> test2 = stops (bot ())
>> where
>> stops :: Int# -> Bool
>> stops _ = True

It looks like GHC is performing a bogus transformation in the
Simplifier. It's not correct in general to beta-reduce ((\x.True) e)
into True if e has an unlifted type.

Simon PJ is the caretaker of the simplifier, and he's away on holiday
right now, I'll ask him to take a look when he gets back.

Cheers,
Simon


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise