But coroutines really only work any better than "objects" if you understand the implication to the stack pointer? Which requires understanding exactly what a thread is. Right?
That is, a basic class that has defined state and methods to modify the state is already enough to explain a state machine. What makes coroutines better for it?