Skip to content

FSI type mismatch when order of generic parameters don't match #15175

@Eliemer

Description

@Eliemer

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 -> unit

implementation 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:

  1. dotnet new classlib -lang F#
  2. <insert code above>
  3. dotnet build -p:OtherFlags="--allsigs" OR manually create above FSI file
  4. include .fsi in project file
  5. 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

No one assigned

    Labels

    Area-Compiler-SigFileGengeneration of signature files - both compiler and IDEBugImpact-Low(Internal MS Team use only) Describes an issue with limited impact on existing code.

    Type

    No type

    Projects

    Status

    Done

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions