iconv(3) では、inbufをNULLにすることで状態のフラッシュを行う機能があり、ストリームの終端ではこれが実行されることが期待されている。

https://manpages.debian.org/stretch/manpages-dev/iconv.3
> In each series of calls to iconv(), the last should be one with inbuf or *inbuf equal to NULL, in order to flush out any partially converted input.

しかし、 GHC.IO.Encoding http://hackage.haskell.org/package/base-4.11.1.0/docs/GHC-IO-Encoding.html にはこれに相当するAPIが存在しない。 結果として、例えば以下のようなコードを実行すると、末尾に出力されるべきエスケープシーケンスが出力されないままになってしまう……

enc <- mkTextEncoding "iso-2022-jp"
withFile "hoge.txt" WriteMode $ \h -> hSetEncoding h enc >> hPutStr h "こんにちは世界"

まあ、iso-2022-jpの末尾のエスケープシーケンスの欠落くらいだと大した問題ではないかもだけど、もっと本質的な情報が欠落してしまうようなケースって実際にはないのかな……?

#Haskell