-
Notifications
You must be signed in to change notification settings - Fork 825
Open
Open
Copy link
Labels
Area-Compiler-CheckingType checking, attributes and all aspects of logic checkingType checking, attributes and all aspects of logic checkingBugImpact-Medium(Internal MS Team use only) Describes an issue with moderate impact on existing code.(Internal MS Team use only) Describes an issue with moderate impact on existing code.
Milestone
Description
In some cases, I can't use the with
keyword to copy and update a record with the F# 7 nested records shortcut syntax, when the source record comes from a function call (but in some situations it compiles fine).
It seems the compiler gets somehow confused... (?)
Repro steps
The following code doesn't compile:
type MyCustomer =
{ FirstName: string
LastName: string
Comment: string option }
type MyBooking =
{ Reference: string
Customer: MyCustomer }
type MyParentObject = { Booking: MyBooking }
module MyParentObject =
let Sample =
{ Booking =
{ Reference = "reference"
Customer =
{ FirstName = "firstname"
LastName = "lastname"
Comment = Some "comment" } } }
let okTest =
let value = MyParentObject.Sample
{ value with
MyParentObject.Booking.Customer.Comment = None }
let failingTest =
let func () = MyParentObject.Sample
{ func () with
MyParentObject.Booking.Customer.Comment = None }
More precisely, the okTest
compiles ok, but the failingTest
does not.
Expected behavior
I would expect the failingTest
to work.
Related information
Provide any related information (optional):
I'm using Visual Studio 17.12 on Windows, with .NET 9 installed.
I reproduced the issue when targeting .NET 8 and .NET 6 too, and also from VS Code.
Did I stumble on a real issue, or am I misunderstanding something?
majocha
Metadata
Metadata
Assignees
Labels
Area-Compiler-CheckingType checking, attributes and all aspects of logic checkingType checking, attributes and all aspects of logic checkingBugImpact-Medium(Internal MS Team use only) Describes an issue with moderate impact on existing code.(Internal MS Team use only) Describes an issue with moderate impact on existing code.
Type
Projects
Status
New