got working the basic StateT over Identity, with StateT parameterised by any monad, and Identity satisfying it
tidied up by separating simulation and candy machine behaviour and state
removed all knowledge of the monad from candy machine types
Extracted execution of the sim out to an app class, to experiment with abstracting over the particular monad in the
simulation
abstracted over the bottom monad - identity; now to abstract over the top (state)
create a state monad abstract type, just not sure how to abstract over it
Argh. I'm stuck.