Skip to content

Copy and update record expression doesn't compile when the record comes from a function #18062

Open
@mlaily

Description

@mlaily

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area-Compiler-CheckingType checking, attributes and all aspects of logic checkingBugImpact-Medium(Internal MS Team use only) Describes an issue with moderate impact on existing code.

    Type

    Projects

    Status

    New

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions