In OCaml, habe ich zwei Modultypen einen Typ definieren t
:Wie werden OCaml-Modultypen (Signaturen), die denselben Typ definieren, zusammengeführt?
module type Asig = sig
type t
val a : t
end
module type Bsig = sig
type t
val b : t
end
Ich möchte verschmelzenden sie die Schaffung eines Modultyp automatisieren. Ich möchte ein Modultyp entspricht erstellen:
module type ABsig_manual = sig
type t
val a : t
val b : t
end
Ich versuchte
module type ABsig = sig
include Asig
include Bsig
end
aber irgendwie Error: Multiple definition of the type name t
. Es scheint unmöglich, dem include
eine Typbeschränkung hinzuzufügen, so dass ich feststecke.
Kontext: Ich habe ein Modul AB
, die beide Signaturen nicht implementiert, und ich will es auf einen Funktor ernähren wie:
module MakeC(AB) = struct
type t = AB.t list
let c = [AB.a; AB.b]
end
module C = MakeC(AB)
ich zwei Argumente wie in verwenden:
module UglyMakeC(A : Asig)(B : Bsig with type t = A.t) = struct
type t = A.t list
let c = [A.a; B.b]
end
module C = UglyMakeC(AB)(AB)
aber dies (ist hässlich und) skaliert nicht gut zu mehr Funktoren oder mehr Signaturen zum Zusammenführen.
So, Wie kann ich die Zusammenführung dieser beiden Modultypen automatisieren? Ich kann A und B nach Bedarf ändern, aber ich möchte sie getrennt halten. Vielleicht ist mein Ansatz auch völlig falsch, und in diesem Fall würde ich gerne Hinweise auf eine bessere Richtung haben.
Type sharing in OCaml - typechecker error ist verwandt, aber verschmelzen Module, nicht Modultypen. Hier
Haben Sie darüber nachgedacht, auf der 'caml-list @ inria.fr' nachzufragen? –