在阅读F#的源代码时,我找到了List<'T>
类型的definition,如下所示:
type List<'T> =
| ([]) : 'T list
| (::) : Head: 'T * Tail: 'T list -> 'T list
有人可以解释一下上面的语法吗?编译器警告“不推荐使用此结构:它仅用于F#库”。语法只是定义歧视联合的一种旧方法吗?如果是,为什么Tail
的类型为'T list -> 'T list
,而不仅仅是'T list
?
答案 0 :(得分:2)
我相信这意味着以下几点:
type List<'T> =
| ([]) : 'T list
| (::) : (Head: 'T * Tail: 'T list) -> 'T list
也就是说,(::)
是一个函数,给定有序对'T * 'T list
生成'T list
。
不推荐使用的构造为有区别的联合构造函数提供类型注释。据我所知,在任何版本的F#中你都不需要这样做。我不知道为什么他们必须在F#库中这样做。