-
Notifications
You must be signed in to change notification settings - Fork 788
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Wildcard character in pattern matches with discriminated unions should raise an error if there is no field to match #1592
Comments
While I kind of agree from a purist standpoint I think I haved used this particular "feature" while using multi line editing. It is kind of nice that you can replace everything with a wildecard, even nothing... |
In this particular case we will leave as is (i.e. not regard it as a bug). Feel free to raise this as a language suggestion (currently on http://fslang.uservoice.com) |
Thanks. No, I don't think it is worth its while to turn this into a language suggestion. I see now that in 7.0 in the language spec the pattern definition is declared recursively, which (given I understand it correctly) appears to allow this syntax (I thought originally it was a syntax error). So, I'm ok with this disposition :). |
May be fixed by #14055. |
Yep, fixed indeed! In #14055. |
If a discriminated union case doesn't define a field, then a wildcard used in a matching pattern should raise an error, just as a variable reference would.
Repro steps
Consider the type:
And the module:
Now consider the following module:
And compare that with this:
Expected behavior
Neither should compile. The wildcard character is not ignorable. Compare, for instance,
fun _ -> true
, this is the same asfun a -> true
. While the wildcard is more flexible in pattern matching, it is a replacement character for something, but here it seems to replace nothingness, which doesn't exist in F# (it isn't evenunit
here).Actual behavior
The example with the wildcard compiles (but I think it shouldn't).
Known workarounds
None. Unless a workaround is to ignore this. But I think it is a syntax error that is ignored by the compiler.
Related information
Using F# 4.0, .NET 4.6 (didn't test with other .NET versions) with VS2015 Update 3.
The text was updated successfully, but these errors were encountered: