私はライブラリとしてGHCを使用して、JavascriptコードジェネレータにHaskellを書いています。 Javascriptは整数型を持たず、そのNumber型は最大253までの整数しか表現できないため、整数をNumbersとして表現し、すべての算術演算を明示的に実行します。これは32ビットGHCではうまく動作しますが、64ビットバージョンではさらに悪くなります。Int32としてInt32を扱うように64ビットGHCに指示する方法はありますか?
GHCはInt64値をIntsに強く強制し、Int定数を64ビット値(0xffffffffは-1ではなく4294967295に変わります)と解釈し、それはあらゆる種類の厄介な問題を引き起こしています。
コンパイラは、標準ライブラリが32ビットマシン上に構築されていれば「通常の」ウェブの場合にはうまく機能しますが、「大量の数字は使用しないでください。あなたのコンパイラのマニュアルで見たいものではありません。 -O0でコンパイルすることで問題の一部(ただしすべてではない)を緩和することはできますが、遅いだけでなく大きすぎるコードも生成されます。
GHCがIntとInt64が同等であると仮定しないようにする必要があります。これも可能ですか?
32ビット整数が必要な場合は、なぜ 'GHC.Int.Int32'を使用しないのですか? –
これは確かに可能ですが、「Intが壊れているのでIntではなくInt32を使用する必要があります」は、コンパイラのマニュアルでも見たいものではありません。 – valderman
「Int」について何が約束されたのですか? –