I zostały zdefiniowane następujące interfejs oraz moduł:Zakres konstruktorów modułu w SML
module type TYPE =
sig
type t
end
module Type = (struct
type t =
| TBot
| T of int
| TTop
end: TYPE)
teraz zdaję sobie sprawę, że jeśli piszę poza Type.T 5
, kompilator daje mi en błędu Error: Unbound constructor Type.T
. Jeśli usuniemy podpis i zatrzymam moduł, błąd zniknie.
1) Więc moim pierwszym pytaniem jest, jak zmienić podpis tak, że mogę używać konstruktorów na zewnątrz?
2) Jednym ze sposobów jest wyraźne zdefiniowanie konstruktora w następujący sposób: czy sądzisz, że jest to metoda konwencjonalna? Jedną z wad, jakie teraz widzę, jest to, że nie pozwala ona na konstruowanie TBot
lub 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) Czy zawsze jest konieczne, aby zewnętrza była w stanie zbudować wartość wewnątrz modułu?