私は、純粋なコードと純粋でないコードとを区別するためにIOが使用されることを理解します。また、私はIOが参照透過性を持つことを認識しています。IOモナドに含まれる合成機能は、望ましくない効果がないことが保証されていますか?
IOについての1つのことは、まだ私にはやや不明です。つまり、IO間には何も悪いことが起こらないという保証があります。なぜなら、呼び出されたときにすべてが一度に実行されるからです。したがって、この怠け者の合成が最後に呼び出されると、他の並行コードはそれを歪めることはありません(この怠惰な合成)。
これは本当ですか? IOはこのようなコードよりも(この文脈で)良いでしょうか?
var x = 1; //shared resource
//some other code access and changes x to 2
const y = multiplyBy100(x);
const z = add1000(y);
log(z); // 1200 instead of desired 1100
私はIOがこのような問題の解決策であることを理解しています。
IO(function() {return x;}).map(multiplyBy100).map(add1000).map(log); //1100 no matter what
私の推論は大丈夫ですか?