shown in this answerとseq
とundefined
は、等価推論の場合には非常に奇妙なことを行います。たとえば、どのモナドも失敗する可能性があります。別の例はthis questionです。`` seq`と比較して `evaluate`は安全ですか?
最近、私は同様のことをするevaluate :: a -> IO a
を見つけました。WHNFの引数を評価しますが、これはIO
アクションが評価されたときだけです。これは "IO
ですべてをやることができる"と予想しているので、はるかに安全なようです。もちろん、どこでも使用することはできませんが、しばしば式を評価する必要性はIO
オペレーション(何らかの理由で、MVar
で作業するときに消費スレッドではなく計算を評価するように)接続されます。
だから私は、どのように安全であるか質問したいと思いますevaluate
?例を作成することは可能ですか(IO
が当然含まれます)、seq
のようなコードについての推論が破られますか?または、それをseq
(特定のプログラムで可能な場合)の安全な代替品と見なすことはできますか?