<div dir="ltr">I'm currently in a graphics class where, in order to provide a standard interface to all of our graphics libraries, we have to process small scripts that look like this:<div><br></div><div>line</div><div>0 0 0 1 1 1</div><div>circle</div><div>0 0 10</div><div>scale</div><div>0 0 3</div><div>save</div><div>pic.png</div><div><br></div><div>I successfully wrote a parser with attoparsec that parses the file into a list of Commands. Now I'm trying to process that list to produce an IO action, and I thought the State monad would be useful to keep track of the persistent state of the shapes to draw and the transformations on them.</div><div><br></div><div>I'm confused about how exactly to do this though. What should the type of my State be? Right now I have an execute function that is</div><div>execute :: Command -> State ParseState (IO ())</div><div>where ParseState is a tuple of stuff. ParseState also includes an IO () because I wanted to be able to create multiple pictures one after another, and I couldn't figure out how to access the previous result value from State to add on to it in the next one.</div><div><br></div><div>So can anyone offer advice on my specific situation, or maybe a simpler example of how to go about writing an interpreter with the State monad?</div><div><br></div><div>Thanks,</div><div>Jake</div></div>