<div dir="ltr">I am a Haskell beginner. I've tried to write a tiny VM-like thing but ran into a problems with IO and evaluation order.<div><br></div><div>Here is the full source code of this VM: <a href="https://gist.github.com/mamontov-cpp/c4d8e2e46e7541c0c646">https://gist.github.com/mamontov-cpp/c4d8e2e46e7541c0c646</a> . This code is supposed to read 4 strings and output them in reverse order.</div><div><br></div><div>While it seems to read some strings, it requests much more than one string from user on each step of evaluation of meta-program, stored as array in main function (which is just wrong).</div><div><br></div><div>I assume the problem with this program, is that the main state, being immutable, seems to get re-evaluated on several steps inside of internal parts of runProgram and runInstructionOrStop, forcing it to repeat requesting data from user.</div><div><br></div><div>So, how can I prevent this main state from being re-evaluated in following code ? Or is there any other problems, which I don't see?</div><div><br></div><div><br></div><div><br></div></div>