
Hi I have a program (below) which when compiled with -O2 gives the result: H:\work\supero\charcount>type log.txt | diff.exe i am here 109 done The process tried to write to a nonexistent pipe. And when compiled with -O0 gives: H:\work\supero\charcount>type log.txt | diff i am here 109 i am here 111 done The process tried to write to a nonexistent pipe. It tries to read two characters, so I really do want two characters to appear. I have tried NOINLINE, but with no effect. Any suggestions? Thanks Neil --------------- -- The program import System.IO.Unsafe import System.IO import Data.Word import Debug.Trace main = p_System_IO_hGetChar 1 `seq` p_System_IO_hGetChar 2 `seq` putStrLn "done" {-# NOINLINE wrapIO #-} wrapIO x = unsafePerformIO (x >>= return) foreign import ccall "stdio.h getchar" getchar :: IO Word8 {-# NOINLINE p_System_IO_hGetChar #-} p_System_IO_hGetChar h = trace "i am here" $ wrapIO (getchar >>= \c -> print c >> return (if c == (-1) then 0 else chr_ c)) chr_ = fromEnum