- If :ip is nil or :running? is false, tries to read from :input. a. If :input is empty, sets :input-blocked? and returns b. If :input is not empty, parses and executes one line
- If :ip is not nil and :running? is true, execute the current program statement a. May produce :output b. May read from :input or set :input-blocked? if empty c. May set :advance-ip? to false
- Maybe advance :ip
- Return
- If there is a :terminate on :control chan, end.
- If there is any output in the interpreter, send it to :output chan
- If interpreter’s input is blocked, transfer input from :input chan
- Advance the interpreter a step and update the state atom