GHC -O2 and unsafePerformIO
Neil Mitchell
ndmitchell at gmail.com
Wed May 2 11:33:39 EDT 2007
Hi
Thanks to dcoutts, I have now come up with an answer. I don't
understand why it works now, but not before. I do remember than
browsing either Core or STG is not a fun thing to do...
p_System_IO_hGetChar h = trace "i am here" $
unsafePerformIO $ getCharIO h
{-# NOINLINE getCharIO #-}
getCharIO h = do
c <- getchar
print c
return $ if c == (-1) then 0 else chr_ c
Thanks
Neil
On 5/2/07, Neil Mitchell <ndmitchell at gmail.com> wrote:
> Hi Bulat,
>
> > Wednesday, May 2, 2007, 7:00:05 PM, you wrote:
> > > {-# NOINLINE wrapIO #-}
> > > wrapIO x = unsafePerformIO (x >>= return)
> >
> > -fno-cse ? it's usual company for unsafePerformIO+NOINLINE :)
>
> No luck, alas. A slightly tweaked version, which is slightly simpler
> and still gives the same behaviour is below.
>
> Thanks
>
> Neil
>
>
> ----------------------
>
>
>
> main = p_System_IO_hGetChar undefined `seq` p_System_IO_hGetChar 12
> `seq` putStrLn "done"
>
> foreign import ccall "stdio.h getchar" getchar :: IO Word8
>
> {-# NOINLINE p_System_IO_hGetChar #-}
> p_System_IO_hGetChar h = trace "i am here" $
> unsafePerformIO (getchar >>= \c -> print c >> return (if c ==
> (-1) then 0 else chr_ c))
>
> chr_ = fromEnum
>
More information about the Glasgow-haskell-users
mailing list