I mean a `fail` message and a `next` message can come concurrently, so we can not use a single object to represent both of them.