我正在研究F#的'99问题',并看到NestedList
的以下定义:
type 'a NestedList = List of 'a NestedList list | Elem of 'a
我对这里的语法感到有些困惑,因为通常在type
之后只有一个类型名称。有人可以澄清一下吗?谢谢!
答案 0 :(得分:4)
这是精简语法中的discriminated union。你也可以把它写成:
type 'a NestedList =
| List of 'a NestedList list
| Elem of 'a
或
type NestedList<'a> =
| List of NestedList<'a> list
| Elem of 'a
这是使用泛型,其中类型本身将另一种类型作为参数。
答案 1 :(得分:3)
F#有两种指定泛型类型的方法:
SomeType<'a, 'b>
('a * 'b) SomeType
这些实际上是两种说法相同的方式,可以互换使用。使用哪一个是优先级和代码标准的问题。通常人们将OCaml样式用于基本F#类型,如list,array或option,以及用户定义和BCL样式的C#样式。
答案 2 :(得分:2)
因此,这是具有泛型类型'a
的通用区分联合的定义。
关键思想是每个元素都有'a
类型。