Everyone's always trying to emulate a state machine - OOP objects are kind of just an unsafe informal state machine implementation.
Oddly, almost noone has tried providing actual state machines where you have to prove you've figured out what the state transitions are.