我了解 IO 用于将纯代码与不纯代码分开。另外,我知道 IO 允许引用透明性。
不过,关于 IO 的一件事对我来说仍然有点模糊。也就是说,保证 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
我的推理可以吗?