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

Types 实现文件中未正确理解签名文件中的列表声明,types,f#,Types,F#,我有以下签名文件F.fsi: module M = type T1 = A | B type T2 = | F | G static member x1 : list<T1> static member x2 : list<T1> Visual Studio将x2的定义用红线标出,并显示以下错误消息: 模块“M”包含静态成员M.T2.x2:obj列表但其签名 指定静态成员M.T2.x2:

我有以下签名文件
F.fsi

module M =

    type T1 = A | B

    type T2 =
        | F
        | G
        static member x1 : list<T1>
        static member x2 : list<T1>
Visual Studio将
x2
的定义用红线标出,并显示以下错误消息:

模块“M”包含
静态成员M.T2.x2:obj列表
但其签名 指定
静态成员M.T2.x2:T1列表
类型不同

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

    static member (x2 : list<T1>) : []
静态成员(x2:list):[]
但这次我收到了以下错误消息:

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


我将
x1
x2
改为函数,从而避开了这个问题,但是有没有其他方法可以让Visual Studio正确推断列表的类型?

注释应该是

module M =

    type T1 = A | B

    type T2 =
        | F
        | G
        static member x1 = [T1.A; T1.B]
        static member x2 : List<T1> = [] 
模块M=
T1型=A | B型
T2型=
|F
|G
静态成员x1=[T1.A;T1.B]
静态成员x2:List=[]

因为您正在注释返回类型,所以注释应该是

module M =

    type T1 = A | B

    type T2 =
        | F
        | G
        static member x1 = [T1.A; T1.B]
        static member x2 : List<T1> = [] 
模块M=
T1型=A | B型
T2型=
|F
|G
静态成员x1=[T1.A;T1.B]
静态成员x2:List=[]

因为您正在注释返回类型

,所以您刚刚遇到了一个棘手的问题:值在.net中不能是泛型的-因此类型推断(它不会首先检查签名文件,而是在上下左右工作)会看到
[]:'一个列表
,并将其强制为
对象列表
,因为。。。John已经告诉过你如何解决这个问题了,这里只是一个简短的评论:没有括号的
静态成员x2:list
也可以!但是括号导致了文章中指出的错误。您刚刚遇到了一个棘手的问题:值在.net中不能是泛型的-因此类型推断(它不会首先检查签名文件,但会在上下左右工作)会看到
[]:'一个列表
,并将其强制为
obj列表
。。。John已经告诉过你如何解决这个问题了,这里只是一个简短的评论:没有括号的
静态成员x2:list
也可以!但是括号会导致文章中指出的错误。太好了。非常感谢,太好了。非常感谢你。