나는 순수한 코드와 불순한 코드를 분리하는 데 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
제 생각은 괜찮습니까?