List<'T> 定义语法的说明

Clarification of List<'T> definition syntax

在阅读F#的源代码时,我发现了List<'T>类型的definition,它是这样的:

type List<'T> = 
       | ([])  :                  'T list
       | (::)  : Head: 'T * Tail: 'T list -> 'T list

有人可以解释一下上面的语法吗?编译器警告 'This construct is deprecated: it is only for use in the F# library'。语法只是定义可区分联合的旧方法吗?如果是这样,为什么 Tail 的类型是 'T list -> 'T list 而不是 'T list

我相信这意味着以下内容:

type List<'T> = 
       | ([])  :                  'T list
       | (::)  : (Head: 'T * Tail: 'T list) -> 'T list

也就是说,(::) 是一个函数,给定一个有序对 'T * 'T list 生成一个 'T list

已弃用的构造正在为受歧视的联合构造函数提供类型注释。据我所知,在任何版本的 F# 中,您都不需要这样做。我不知道为什么他们必须在 F# 库中这样做。