Comments (2)
@brianrourkeboll Thank you for finding a workaround
from fsharp.
Interesting. I suppose it is because &
was not valid in the type syntax before, and so only the part between :
and &
was being parsed as a type, i.e., exn
; & …
and so on were being parsed as separate patterns. Now that &
is valid in the type syntax (after #15413), the parser no longer stops at &
after the :
and instead tries keep parsing the subsequent patterns (:? …
or (:? …)
) as part of the type.
Parenthesizing the typed pattern itself _ : exn & …
→ (_ : exn) & …
allows your example to compile in F# 8:
module Repro =
let fail1() =
let x: Result<unit, exn> = Error (NullReferenceException())
match x with
| Error ((_: exn) & :? System.NullReferenceException) -> // Works in F# 8 with parens around the typed pattern.
printfn "NullRef!"
| _ ->
()
let fail2() =
let x: Result<unit, exn> = Error (Exception())
match x with
| Error ((_: exn) & (:? System.NullReferenceException)) -> // Works in F# 8 with parens around the typed pattern.
printfn "NullRef"
| _ ->
printfn "Not a NullRef"
Repro.fail1()
Repro.fail2()
But you are right about this being a regression.
from fsharp.
Related Issues (20)
- Support named argument syntax for property setters in VS HOT 4
- Don't warn FS3559 when obj is inferred if the obj is expected there HOT 1
- FS3559 triggers on query expressions
- Unexpected FS3571 shorthand lambda atomic error HOT 5
- Skip CI on comment/whitespace only changes
- Can't use addition (substruction) multiple times in member for constrained to `INumber<>` generic HOT 1
- Nested record copy-and-update expression seems to fail when copying and updating a nested value HOT 1
- Using `TailCall` diagnostic attribute on non tailcall rec function does not generate warning on Visual Studio Error List pane HOT 11
- Inconsistent 'missing `new`' warnings HOT 4
- TailCall incorrectly flags some tail recursive functions HOT 7
- Cannot use `base` as identifier in a class, even double-backticked
- VS: allowStaleResults is hardcoded false
- LSP: Choose LSP library (or define own and have a translation layer for VS one)
- LSP: Investigate New VSIX extension options
- Avoid boxing on equality and comparison HOT 3
- Write up 'Compiler Perf design session' notes from the summer (hand written papers at @T-Gro's desk)
- Query builder throws error when using ToListAsync in combination with EF Core DbSet HOT 1
- Comparison of incorrectly annotated classes hides original problems
- Nested Record Copy-and-Update missing case: when source is a function output HOT 3
- `Volatile.Read` can no longer read `ref` (instead it wants `inref`) HOT 11
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fsharp.