Как мне определить 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, так как я не уверен, что это возможно).
Можно ли каким-то образом решить эту проблему?