^ I thought of this idea a couple of times too.
As for if true && let (1,) = (2,) { }, it seems like we should expect boolean value at right hand side of &&.
So I guess we need a new binding syntax here.
what we can do now is to if let (true, (1,)) = (true, (2,)) { }, which is verbose.
so maybe if let (1,) = (2,) where true { } is good enough
and we might also introduce while let Some(x) = iter.next() where x > 42 { }
In case we need to match 2 patterns at the same time and deal with else-case in one place, maybe if let Some(x) = foo, Ok(y) = bar { ... } else { ... }, that is, use comma to separate multiple pattern-matching, but this syntax won’t fit for boolean conditions.
so maybe combine these two if needed: if let Some(x) = foo, Ok(y) = bar where cond { ... } else { ... }
Instead of where, maybe when as a contextual keyword will look better