Technically, iterating through MessageReaders is a side effect. It's a sort-of acceptable one since its mutability is somewhat local to the system, but nonetheless..
This issue is for creating a MessageReadAnd<M: Message, E: Effect, F: FnOnce(M) -> E> effect.