2012-12-16 88 views
3

假設我有以下設置分型和OCaml的模塊納入

module type FOO = sig type f val do_foo : f end 
module type BAR = sig type b val do_bar : b end 


module type FOOANDBAR = 
    sig 
    include FOO 
    include BAR 
    end 

現在我想(在一個不錯的方式,又名,不復制接口,使FOO和BAR仍然亞型)執行限制類型f和類型b是相同的。

有沒有一種很好的方式來做到這一點OCaml,可能使用一些不同的方法,包括關鍵字?

謝謝!! -Joseph

回答

5
module type FOOANDBAR = 
    sig 
    include FOO 
    include (BAR with type b = f) 
    end 
+0

Gracias! (今天是我與OCaml的第二天,這是非常容易混淆的,但這非常容易) –

+1

'include(bar with type b = f)'和'include(BAR with type b:= f )'?後者用「f」粗暴地用「b」代替「b」。 – lukstafi

+0

@lukstafi:w':='是一種破壞性的替代,它改變了簽名,而不是隻用平等來改進它。我認爲在這種情況下任何一個都可以,但是我使用了'=',因爲它更簡單並且已經可用了很長時間,而':='只是在OCaml 3.12中添加的。 – gasche