Chcę definiują interfejsu PROPERTY
i co najmniej 2 moduły Type
i Formula
dopasowania go:o konstrukcji modułów i interfejs
module type PROPERTY =
sig
type t
val top : t
val bot : t
val to_string: t -> string
val union: t -> t -> t
val intersection: t -> t -> t
end
module Type = (struct
type t =
| Tbot
| Tint
| Tbool
| Ttop
...
end: PROPERTY)
module Formula = (struct
type t =
| Fbot
| Ftop
| Fplus of int * Type.t
...
let union =
... Type.union ...
...
end: PROPERTY)
Są dwa warunki:
1) Chciałbym konstruktorzy Type
mogą być wywoływani na zewnątrz (wszystkie programy w razie potrzeby)
2) Część niektórych wartości Formula
zawiera wartości Types
, na przykład Fplus (5, Type.Tint)
jest typu Formula
; również niektóre funkcje Formula
musiałby zadzwonić niektóre funkcje Type
np Formula.union
musi zadzwonić Type.union
Czy ktoś może mi powiedzieć jak zmienić deklarację wyżej fullfil moje wymagania? W razie potrzeby można dodać dodatkowe moduły ...
Drive-by komentarzu (prostopadła do gasche na odpowiedź) : możesz pisać deklaracje z podpisem do podpisu wygodnie jak "moduł X: SIG = ...". –