2017-07-20 3 views
0

Imaginez que j'ai une série de modules A1..AnB1..Bn tous ensemble une unité de compilation complète. Maintenant, je définis un deux nouveaux modules avec ces modules imbriqués:Inclure tous les modules à l'intérieur d'un module en ocaml

(* A.mli *) 
module A : sig 
    module A1 
    ... 
    module An 
end 
(* A.ml *) 
module A1 = A1 
.. 
module An = An 

(* B.mli *) 
module B : sig 
    open A 
    module B1 
    ... 
    module Bn 
end 
(* B.ml *) 
module B1 = B1 
.. 
module Bn = Bn 

ainsi les modules originaux sont réexporté en utilisant des alias du module. Notez que les modules dans B peuvent se référer aux types dans les modules dans A1..An!

maintenant, je veux créer un nouveau module AB telle que la signature est:

module AB : sig 
    module A1 
    ... 
    module An 

    module B1 
    ... 
    module Bn 
end 

Cependant, je ne veux pas écouter tous les modules individuels, pour réexporter le contenu. L'utilisation de -open n'est pas autorisée non plus. Le mieux que je peux trouver est:

module AB : sig 
    include module type of struct include A end 
    include module type of struct include B end 
end 

Cependant, cela échouera comme nous perdons le lien entre, disons, le type A.A1.t et A1.t. Y a-t-il un moyen de réaliser ce que je veux? Merci.

Répondre

0

Il ressemble à ce qui suit fonctionnerait:

module AB : sig 
    include A 
    include B 
end 

(module type of fait des résumés types, de sorte que vous auriez besoin d'ajouter with type ... contraintes, ce qui est en désordre avec des modules imbriqués)