ghc さんは、エラーメッセージに ascii の範囲外の文字を平気で使ってくる。これ、環境によってはハマるので勘弁して欲しい。具体的にはWindowsなんだけど。
例えばこんなメッセージ。
Prelude> 3 / 4 :: Int <interactive>:1:1: error: • No instance for (Fractional Int) arising from a use of ‘/’ • In the expression: 3 / 4 :: Int In an equation for ‘it’: it = 3 / 4 :: Int
メッセージ作ってる ここ とか ここ を見る限り、環境によっては使わないっぽい。この使うかの判定は ここ でやってる。ロケールのエンコーディングで "‘’"
が可逆に変換できるか見てるっぽい。可逆であればいいので、ロケールがユーザが望むエンコーディングに設定されているかは関係ない。つまり、文字化けの起こる状況でも容赦なく使ってくる。
で、 localeEncoding
がどう決まるかだが、 Windowsか否かで判定が別れている。Windowsだと code pageを使って判定している ようで、 chcp 65001
している環境だと UTF-8 になる。 932
の状態だと CP932 で入出力を扱おうとするので、 UTF-8 を期待するようなツールがどっかに入っていると面倒なことになる。というか、今時 CP932 でも動くことを想定したツールなんてほとんど無い気がする。