GHC をライブラリとして使用して、Haskell から Javascript へのコード ジェネレーターを作成しています。Javascript には整数型がなく、その Number 型は 2⁵³ までの整数しか適切に表現できないため、整数を Number として表現し、2³² を法とするすべての演算を明示的に実行します。これは 32 ビット GHC ではうまく機能しますが、64 ビット版ではかなり悪くなります。
GHC は喜んで Int64 値を Int に変換し、Int 定数を 64 ビット値として解釈します (たとえば、0xffffffff は -1 ではなく 4294967295 になります)。
コンパイラは、標準ライブラリが 32 ビット マシン上に構築されている場合、64 ビット システム上でも「通常の」Web 処理に対して非常にうまく機能しますが、「大きな数字を使用しないでください。OK?」コンパイラのマニュアルで見たいものではありません。問題の一部 (すべてではない) は、-O0 を指定してコンパイルすることで軽減できますが、(当然のことながら) 遅いだけでなく、大きすぎるコードが生成されます。
そのため、GHC が Int と Int64 が同等であると想定しないようにする必要があります。これは可能ですか?