2016-06-01 21 views
1

Ich habe eine sehr große Signatur mit zwei abstrakten Typen:eine Signatur mit zwei abstrakten Typen gegeben, eine Untersignatur definieren, die sie gleich macht

signature GENERAL_FOO_BAR = 
sig 
    type foo 
    type bar 
    (* lots of stuff here *) 
end 

ich eine Untersignatur von GENERAL_FOO_BAR, wo die beiden abstrakten Typen deklarieren möchten identifiziert werden, aber keines der folgenden Versuche funktioniert:

signature SPECIAL_FOO_BAR = GENERAL_FOO_BAR 
    where type foo = bar 

signature SPECIAL_FOO_BAR = GENERAL_FOO_BAR 
    sharing type foo = bar 

Es wäre sehr mühsam sein, einen Dummy-Typen wie folgt zu verwenden:

signature SPECIAL_FOO_BAR = 
sig 
    type both 
    include GENERAL_FOO_BAR 
    where type foo = both 
    where type bar = both 
end 

Da zwingt es jeden, der SPECIAL_FOO_BAR implementieren will, um den Dummy-Typ zu definieren. Gibt es eine bessere Alternative?

Antwort

2

Sie müssen nicht so explizit über "Subsignaturen" sein. Hier ist ein einfaches Beispiel für eine "Untersignaturen":

signature F = 
sig 
    type foo 
    type bar 
end 

signature G = 
sig 
    type foo = int 
    type bar = string 
end 

structure C : G = 
struct 
    type foo = int 
    type bar = string 
end 

structure D : F = C 
+0

Mein 'F' ist * sehr * groß, though. Ich möchte es nicht kopieren. Eigentlich mag ich nicht viel "include", aber hier würde es viel Platz sparen. – pyon