Else branch with capture is used for error values, that is why it wants an error union, but if you don’t have an error union, don’t use a capture on the else / don’t have an else. You can’t capture the payload of an optional in the else branch.
So if(maybe_num == null) return; should work too.
But orelse return is even more convenient.
I got bit by this exact thing early on, I don’t think it would be that nuts if if (!optional()) { ... } else |val| {...} worked.
The wacky idea is the mandatory double else for handling !?T, which brings ‘reversal optional’ along for the ride (in a way which is compatible with the double else, for that matter).
I still don’t know if it’s a great idea or a terrible one, to be honest.