stdin を "NoBuffering" mode にすれば解決すると思います。

> main = copyFile stdin stdout

を

  main = hSetBuffering stdin NoBuffering >> 
           copyFile stdin stdout

にして試してみてください。
  (環境によっては stdout も hSetBuffering しないとだめかも?)

デフォルトのバッファリングモードは Haskell 98 では規定されていないので、
ハンドルを取り扱うときには、たとえ stdin であっても、hSetBuffering を
明示的に書くほうが無難です。

 : 参照 : Haskell 98 report 11.4.2
   The default buffering mode when a handle is opened is implementation-
   dependent and may depend on the file system object which is attached
   to the handle.

いけがみ

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