4
我如何设法在OCaml中定义一个Set
,它可以包含其类型的元素?在OCaml中递归设置
要解释,我有一个像
type value =
Nil
| Int of int
| Float of float
| Complex of Complex.t
| String of string
| Regexp of regexp
| Char of char
| Bool of bool
| Range of (int*int) list
| Tuple of value array
| Lambda of code
| Set of ValueSet.t (* this isn't allowed in my case since module is declared later*)
另外进行了大量的数据类型的类型声明的问题,我宣布一个具体的模块ValueSet
在同一个文件后:
module ValueSet = Set.Make(struct type t = value let compare = Pervasives.compare end)
的问题是,ValueSet
有value
,因为它是elt类型,但value
可以是ValueSet
,所以我在尝试编译时遇到麻烦。
所有这些声明都包含在一个名为types.ml
的文件中(它有自己的接口types.mli
,但没有任何ValueSet
模块decl,因为我不确定它是可能的)。
这个问题能以某种方式解决吗?
看来我的OCaml编译器(3.11.0)还不支持它们。无论如何,在types.ml文件中有这样的递归声明会强制使用像Types.InnerTypes和Types.ValueSet这样的内部模块,对于ValueSet可以正常使用,但对其他模块不可以。 – Jack 2010-07-11 22:03:48
I认为我正在慢慢地管理它,以便以某种方式工作..如果我能够使其工作,我很可能会在短时间内接受您的答案:) – Jack 2010-07-11 22:43:05
OCaml自3.07版本以来已有递归模块。 – Gilles 2010-07-16 21:08:37