“Structuring a large program is always a difficult job. One of the particular problems that often comes up is this: if you have a piece of code producing data, and another piece of code consuming it, which should be the caller and which should be the callee?…”
http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
