I was also thinking that it might be too much to enforce the `receiveUpdate`. It would be more explicit if it was named `receiveReplay` (as in your first attempt), and then let the user decide how to make it DRY. It is normally just a oneliner `state = state.update(evt)`, which in my opinion is not bad to have duplicated.