"This allows different game entities to communicate with each other while keeping their own update functions clean."
Credit for this approach is due to a combination of Purely Functional Retrogames, Part 4 and messing around with Stackless Python and Erlang.