列表的澄清<> T>定义语法

时间:2015-03-16 18:08:17

标签: f#

在阅读F#的源代码时,我找到了List<'T>类型的definition,如下所示:

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

有人可以解释一下上面的语法吗?编译器警告“不推荐使用此结构:它仅用于F#库”。语法只是定义歧视联合的一种旧方法吗?如果是,为什么Tail的类型为'T list -> 'T list,而不仅仅是'T list

1 个答案:

答案 0 :(得分:2)

我相信这意味着以下几点:

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

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

不推荐使用的构造为有区别的联合构造函数提供类型注释。据我所知,在任何版本的F#中你都不需要这样做。我不知道为什么他们必须在F#库中这样做。