Consider atomically incrementing a variable. You need to both perform the increment, and get the value.
The crux is that you can't deterministically know how the operation will go until you try it, and you therefore have to return some information about the operation itself which can't just be derived in a pure way from the state of things before or after the operation.