dotnet / dotnet/fsharp

Unexpected type inference issue in CE overloads

Open
#18,734 0 comments 0 reactions 0 assignees View on GitHub
Area-ComputationExpressions Bug
Dominant language
F#
Stars
4.3k
Forks
876
Avg merge
4d 11h
Merged PRs (30d)
131

Description

Addition of the problematic overload breaks inference for non-related cases, see `ProblematicClass` overload below. What is very strange - that the issue doesn't occur with C# classes that implement at least one interface (for example the issue won't reproduce if you replace `ProblematicClass` with `StringBuilder`). Issue still persists with F# classes (interfaces don't help) or C# classes that don't implement at least one interface, which confirms that current situation is buggy.

Related issue https://github.com/Lanayx/Oxpecker/pull/76

**Repro steps**

```fsharp
type IMarker = interface end

type Test() = interface IMarker

// Problematic class
type ProblematicClass() = class end

type TestFun = Test -> unit

type Test with
member inline _.Combine
(first: TestFun, second: TestFun)
: TestFun =
fun builder ->
first builder
second builder

member _.Zero() : TestFun = ignore

member _.Delay(delay: unit -> TestFun) : TestFun = delay()

member _.Yield(element: #IMarker) : TestFun = fun cont -> ignore element

// Problematic overload
member _.Yield(element: ProblematicClass) : TestFun = fun cont -> ignore element

member this.Run(runExpr: TestFun) =
runExpr this
this

let inner (children: #IMarker) =
Test() {
children
}

let test () =
Test() {
inner <| Test()
}
```

**Expected behavior**

Overload should just work

**Actual behavior**

The error is shown `The type 'Test' is not compatible with the type 'ProblematicClass'`

**Known workarounds**

No known workarounds.

**Related information**

Provide any related information (optional):

* Windows 10
```
.NET SDK:
Version: 9.0.301
Commit: a596cd22e2
Workload version: 9.0.300-manifests.9bcbba73
MSBuild version: 17.14.5+edd3bbf37
```
* JetBrains Rider 2025.1.4

Image

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.