2012-12-18 87 views
6

我想定義一個接口PROPERTY的至少2所述的設計,和模塊TypeFormula匹配它:模塊和接口

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) 

有兩個要求:

1)我想的Type構造函數可以外部調用(所有節目如有必要)

2)的Formula一些值的一部分包含的Types值例如Fplus (5, Type.Tint)的類型爲Formula;也Formula一些功能需要調用的Type一些功能,例如,Formula.union需要調用Type.union

誰能告訴我如何修改上述聲明fullfil我的要求是什麼?如果需要,可以添加額外的模塊...

+0

驅動式註釋(正交gasche的回覆) :你可以很方便地用一個簽名賦值來編寫聲明,就像'module X:SIG = ...'一樣。 –

回答

6

不要將: PROPERTY密封鑄件應用到模塊聲明中。這隱藏了返回模塊的額外信息。你還是使用:

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

如果你還需要檢查TypeFormula不符合PROPERTY界面,你可以做單獨:

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

應用':PROPERTY'的目的是在後面我將用'PROPRETY'作爲參數:'module ZFUN = functor(Prop:PROPERTY) - > struct ... end' – SoftTimur

+3

你不需要需要在'Type'和'Formula'的聲明處強制抽象接口。當您應用'ZFUN'函子時,將會發生界面滿意度檢查。 – gasche

+0

我明白了...謝謝你... – SoftTimur