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# 库中这样做。
在阅读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# 库中这样做。