I don't think it's evil; because `become` is a control effect, as `return` is, it's explicit. But it's a different control effect and does things in different orders.

* `return`: evaluate argument, then return
* `become`: return, then evaluate argument