error[E0308]: mismatched types --> $DIR/compatible-variants-in-pat.rs:10:9 | LL | match f { | - this expression has type `Foo` LL | Bar { x } => { | ^^^^^^^^^ expected `Foo`, found `Bar` | help: try wrapping the pattern in `Foo::Bar` | LL | Foo::Bar(Bar { x }) => { | +++++++++ + error[E0308]: mismatched types --> $DIR/compatible-variants-in-pat.rs:21:9 | LL | struct S; | -------- unit struct defined here ... LL | match s { | - this expression has type `Option` LL | S => { | ^ | | | expected `Option`, found `S` | `S` is interpreted as a unit struct, not a new binding | = note: expected enum `Option` found struct `S` help: try wrapping the pattern in `Some` | LL | Some(S) => { | +++++ + help: introduce a new binding instead | LL | other_s => { | ~~~~~~~ error[E0308]: mismatched types --> $DIR/compatible-variants-in-pat.rs:32:9 | LL | struct S; | -------- unit struct defined here ... LL | match s { | - this expression has type `Result` LL | S => { | ^ | | | expected `Result`, found `S` | `S` is interpreted as a unit struct, not a new binding | = note: expected enum `Result` found struct `S` help: try wrapping the pattern in a variant of `Result` | LL | Ok(S) => { | +++ + LL | Err(S) => { | ++++ + help: introduce a new binding instead | LL | other_s => { | ~~~~~~~ error: aborting due to 3 previous errors For more information about this error, try `rustc --explain E0308`.