Comment puis-je définir un Set
dans OCaml qui peut aussi contenir un élément de son type?Jeu récursif dans OCaml
Pour expliquer le problème que j'ai une déclaration de type pour un grand nombre de types de données comme
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*)
En outre, je déclare un module concret pour ValueSet
plus tard dans le même fichier:
module ValueSet = Set.Make(struct type t = value let compare = Pervasives.compare end)
Le problème est que ValueSet
a value
comme c'est le type Elt, mais value
peut être un ValueSet
donc je reçois des problèmes tout en essayant de le compiler. Toutes ces déclarations sont contenues dans un fichier nommé types.ml
(qui a sa propre interface types.mli
mais sans ValueSet
module decl puisque je ne suis pas sûr que ce soit possible).
Ce problème peut-il être résolu d'une manière ou d'une autre?
Il semble que mon compilateur OCaml (3.11.0) ne les supporte pas encore. Dans tous les cas, avoir ce type de déclaration récursive à l'intérieur de 'types.ml' va forcer à avoir des modules internes comme' Types.InnerTypes' et 'Types.ValueSet' qui peuvent convenir à ValueSet mais pas à l'autre .. – Jack
I pense que je le gère lentement pour fonctionner d'une certaine manière .. J'accepterai probablement votre réponse dans peu de temps si je peux la faire fonctionner :) – Jack
OCaml a eu des modules récursifs depuis 3.07. – Gilles