2012-12-18 17 views
6

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 ...

+0

Drive-by komentarzu (prostopadła do gasche na odpowiedź) : możesz pisać deklaracje z podpisem do podpisu wygodnie jak "moduł X: SIG = ...". –

Odpowiedz

6

Nie należy stosować odlewów uszczelniających : PROPERTY do deklaracji modułu. To ukrywa dodatkowe informacje z zwróconego modułu. należy raczej używać:

module Type = struct .. end 
module Formula = struct .. end 

Jeśli nadal chcesz, aby sprawdzić, Type i Formula spełniają interfejs PROPERTY, można to zrobić oddzielnie:

let() = 
    ignore (module Type : PROPERTY); 
    ignore (module Formula : PROPERTY); 
    () 
+0

Celem zastosowania ': PROPERTY' jest to, że później mam zamiar zrobić funktor z' PROPRETY' jako argumentami: 'module ZFUN = functor (Prop: PROPERTY) -> struct ... end' – SoftTimur

+3

Nie musisz trzeba wymusić abstrakcyjny interfejs w miejscu deklaracji typu "Typ" i "Formuła". Sprawdzanie zadowolenia interfejsu będzie miało miejsce po zastosowaniu funktora 'ZFUN'. – gasche

+0

Widzę ... Dziękuję ... – SoftTimur

Powiązane problemy