-
Notifications
You must be signed in to change notification settings - Fork 830
Description
If i use explicit generic type arguments in my implementation file, BUT they dont match the order in which they are used in the function, the compiler throws a type mismatch error between the (auto-generated) fsi files and the fs file.
Specifically, if my implementation function declares 'a then 'b but goes on to use 'b first in its implementation signature, the FSI file wont capture that detail and completely misunderstand the order of generics used.
fsi file
val f: x: 'b -> y: 'a -> unitimplementation file
let f<'a, 'b>
(x: 'b)
(y: 'a)
= printfn "%A %A" x y Results in
... Program.fs(1,5): error FS0034: Module 'Program' contains↔
val f: x: 'a -> y: 'b -> unit ↔but its signature specifies↔ val f: x: 'b -> y: 'a -> unit ↔The types differ[...]
Repro steps
Provide the steps required to reproduce the problem:
dotnet new classlib -lang F#- <insert code above>
dotnet build -p:OtherFlags="--allsigs"OR manually create above FSI file- include .fsi in project file
dotnet build
Expected behavior
No compiler error, previous dotnet build ensures theres no errors present in code
Actual behavior
type mismatch compiler error, signature file has the order of generic parameters in order of appearance, regardless of order of implementation
Known workarounds
Implementation MUST declare generic parameters in order of appearance
Related information
Provide any related information (optional):
.NET SDK: 7.0.203 (also tried with prerelease 7.0.400-preview.23226.4)
OS: Windows 11
Metadata
Metadata
Assignees
Labels
Type
Projects
Status