OCaml 中的多态类型

Polymorphic types in OCaml

假设我想在 OCaml 中创建一个 set 类型。我希望它为空,或由 'a.

类型的列表表示

我的定义如下:

type 'a set_ = Empty | Set of 'a list;;

如果我想创建一个“可表达类型”类型,其中包括整数、布尔值、字符串文字和集合,我不确定如何去做。我尝试了以下方法:

type exType = Int of int | Bool of bool | String of string | EmptySet of Empty | StringSet of string Set | BoolSet of bool Set | IntSet of int Set

但我收到一个语法错误(没有更多信息),它强调了 EmptySet of Empty 后面的 | 字符。

实现我所追求的目标的正确方法是什么?

标识符 Empty 不是类型,而是值。类型名称以小写字母开头,因此这实际上是一个语法错误。

(在 OCaml 中,大写标识符和非大写标识符属于不同的句法类别。)

你必须为空集决定另一个计划。因为它是空的,所以它实际上不需要任何关联数据(我认为)。所以你可以:

. . . | EmptySet | . . .

也许。

更新

同样,Set 是一个值(实际上是一个值构造函数)而不是一个类型。你想要这个(我很确定):

StringSet of string set_

还有一个线索是类型名称以小写字母开头。