实现文件中未正确理解签名文件中的列表声明

Shr*_*roy 1 f# types

我有以下签名文件F.fsi:

module M =

    type T1 = A | B

    type T2 =
        | F
        | G
        static member x1 : list<T1>
        static member x2 : list<T1>
Run Code Online (Sandbox Code Playgroud)

在我的实现文件中,F.fs我有以下内容:

module M =

    type T1 = A | B

    type T2 =
        | F
        | G
        static member x1 = [T1.A; T1.B]
        static member x2 = [] // LINE MARKER 1; ERROR OCCURS HERE
Run Code Online (Sandbox Code Playgroud)

Visual Studio x2使用以下错误消息对行的定义进行红线处理:

模块'M'包含static member M.T2.x2 : obj list但其签名指定static member M.T2.x2 : T1 list 类型不同

似乎在实现文件中,空列表被推断为具有泛型类型,即使签名文件清楚地指示列表是类型T1.我尝试了以下更正:

    static member (x2 : list<T1>) : []
Run Code Online (Sandbox Code Playgroud)

但这次我收到以下错误消息:

只有简单的变量模式才能绑定在let rec构造中

我通过制作x1x2转换函数来绕过这个问题,但是有没有不同的方法让Visual Studio正确推断列表的类型?

Joh*_*mer 7

注释应该是

module M =

    type T1 = A | B

    type T2 =
        | F
        | G
        static member x1 = [T1.A; T1.B]
        static member x2 : List<T1> = [] 
Run Code Online (Sandbox Code Playgroud)

因为您正在注释返回类型