I believe that if let
guards are planned, but they always apply to the entire match arm. This restriction could be removed by requiring parentheses in some cases:
match foo {
A | B if bar => {}
// is equivalent to
(A | B) if bar => {}
// This could be allowed too:
(A if bar) | (B if !bar) => {}
(A if let x = true) | (B if let x = false) => {}
}