he definido la siguiente interfaz y el módulo:Ámbito de constructores de un módulo en OCaml
module type TYPE =
sig
type t
end
module Type = (struct
type t =
| TBot
| T of int
| TTop
end: TYPE)
Ahora se dan cuenta de que si escribo fuera Type.T 5
, el compilador me da error en Error: Unbound constructor Type.T
. Si elimino la firma y guardo el módulo, el error desaparecerá.
1) Así que mi primera pregunta es, ¿cómo cambiar la firma de modo que pueda usar los constructores en el exterior?
2) Una forma es definir un constructor explícitamente de la siguiente manera, ¿cree que es una forma convencional? Una desventaja que puedo ver ahora es que no permite construir TBot
o TTop
.
module type TYPE =
sig
type t
val make : int -> t
end
module Type = (struct
...
let make (i: int) : t =
T i
end: TYPE)
3) ¿Es siempre necesario dejar que el exterior sea capaz de construir un valor dentro de un módulo?