内部でロケール依存の変換をするIOライブラリを書いてみた。
やっつけだけど、良かったらどうぞ。
http://yogimo.sakura.ne.jp/ssc/ssc-0.0.9.tar.gz

使い方 (ghc-6.4.2以上が必要)
アーカイブを展開して、そこに移動し、
runhaskell Setup.lhs configure
runhaskell Setup.lhs build
runhaskell Setup.lhs install
でインストールできる。アンインストールは、
runhaskell Setup.lhs unregister
してから、インストール先のディレクトリ(インストール時に表示される)を手で削除。
使いたいときは、モジュールの先頭に

import System.IO.SSC.Haskell98
import Prelude hiding(putChar, putStr, putStrLn, print, getChar,
  getLine, getContents, interact, readFile, writeFile, appendFile, readLn)

と書いておけば、標準のライブラリよりも優先して使われる。
インタフェースはSystem.IOと同じなので、特にいろいろ考えることなく使える。

main = putStrLn "諸行無常のHELLO WORLD"

とか。ただし、このライブラリのHandleは標準のHandleと互換性がないので注意。