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!