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_
还有一个线索是类型名称以小写字母开头。
假设我想在 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_
还有一个线索是类型名称以小写字母开头。