Unexpected type inference issue in CE overloads
- 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
Contributor guide
Assessment
This issue has not been assessed yet.