My Glas language uses conditionals based on backtracking, i.e. `try/then/else`. If the `try` clause succeeds, we proceed to `then`, otherwise we backtrack (undoing effects of 'try') then proceed to `else`. In this design, it is not a problem for the `try` clause to adjust the environment (i.e. stack type, var types, etc.) locally for the `then` clause, i.e. similar to `if let` of swift. But without undoing effects, this pattern easily becomes very troublesome IMO because the system state received by the 'else' clause would be very unclear.