module ocaml variants

module - OCaml: circularidad entre el tipo de variante y la definición del módulo



variants (1)

Puede intentar usar módulos recursivos . Por ejemplo, las siguientes compilaciones:

module rec M : sig type re = EmptySet | EmptyWord | Symb of char | Star of re | Conc of re list | Or of (RegExpSet.t * bool) end = struct type re = EmptySet | EmptyWord | Symb of char | Star of re | Conc of re list | Or of (RegExpSet.t * bool) ;; end and RegExpOrder : Set.OrderedType = struct let compare = Pervasives.compare type t = M.re end and RegExpSet : (Set.S with type elt = M.re) = Set.Make( RegExpOrder )

Cambiaré de Haskell a OCaml pero estoy teniendo algunos problemas. Por ejemplo, necesito una definición de tipo para expresiones regulares. Lo hago con:

type re = EmptySet | EmptyWord | Symb of char | Star of re | Conc of re list | Or of (RegExpSet.t * bool) ;;

Los elementos dentro de O están en un conjunto (RegExpSet), por lo que lo defino a continuación (y también una función de mapa):

module RegExpOrder : Set.OrderedType = struct let compare = Pervasives.compare type t = re end module RegExpSet = Set.Make( RegExpOrder ) module RegExpMap = Map.Make( RegExpOrder )

Sin embargo, cuando hago "ocaml [nombre del archivo]" obtengo:

Error: Unbound module RegExpSet

en la línea de "O" en la definición de "re".

Si cambio estas definiciones, es decir, si escribo las definiciones de los módulos antes de las definiciones de tipo re, obviamente obtengo:

Error: Unbound type constructor re

en la línea de "tipo t = re".

¿Como puedo resolver esto? ¡Gracias!