- returning X or #f;
- returning X or raising an exception; or
- returning X and taking a failure thunk
This is one case where true unions do cause some problems, so maybe I should have tempered my earlier enthusiasm a little. Still, it's not insurmountable, and this cost needs to be weighed against the price of strictly disjoint unions.