ghc-6.4/libraries/base/GHC/IO.hs を見ていると

     BlockBuffering _ -> do
	new_buf <- fillReadBuffer fd True (haIsStream handle_) buf
		--		     ^^^^
		-- don't wait for a completely full buffer.
	hGetcBuffered fd ref new_buf

なので、 hIsEOF と hGetChar で buffer の取り扱いが違うんじゃないでしょうか。

hanatani


--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/