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