dotnet / dotnet/fsharp

Better diagnostics when using "as alias" in binding without wrapping expression in parens

Offen
#5,259 6 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Area-Diagnostics Feature Improvement
Vorherrschende Sprache
F#
Sterne
4.3k
Forks
876
Ø Merge
4 T. 8 Std.
Gemergte PRs (30 T.)
133

Beschreibung

When giving alias via `as`, the first element of a tuple can be matched without wrapping it between parens, while the same doesn't work for any other items in the tuple.

```fsharp
let foo a b =
match a, b with
| Some _ as aa, None -> aa, None
| None, Some _ as bb -> None, bb // doesn't compile
```
> This expression was expected to have type ''a option' but here has type ''b option * 'c option'

if I wrap the second tuple element in the match in parens, it compiles:

```fsharp
let foo a b =
match a, b with
| Some _ as aa, None -> aa, None
| None, (Some _ as bb) -> None, bb
```

This seems to be inconsistent behaviour, failing principle of least surprise, and leading to confusing error message.

Is it according to spec or some issue that needs to be fixed? Should the parens be mandatory or optional in that case?

Reproduces in VS2015 and VS2017.

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.