Word32、String (カリー化は無視) などのいくつかのパラメーターを取り、IO Word32 を出力する関数を haskell で作成しました。さて、これは真の意味での関数です:同じ入力に対して、出力は常に同じになります. 副作用はありません。関数が Word32 ではなく IO Word32 を返す理由は、関数が多くの 32 ビット リニア フィードバック シフト レジスタ (lfsr) およびその他のレジスタをループ内で数回更新して、最終的な Word32 出力を計算するためです。
私の質問は次のとおりです。この関数には実質的に副作用がないことを考えると、関数がIO Word32ではなくWord32を返すように、関数実装内でこれらのレジスタ更新を非表示にすることは可能ですか? もしそうなら、どのように?