2010-05-05 3 views
6

En OCaml 3.11, je veux "étendre" un module existant en utilisant la directive include, comme suit:module à l'aide inclure dans OCaml

module MyString = struct 
    include String 
    let trim s = ... 
end 

Pas de problème. Mais maintenant je veux exposer explicitement le type de ce module (c'est-à-dire dans un fichier .mli). Je veux quelque chose comme ceci:

module MyString : sig 
    include String 
    val trim : string -> string 
end 

Mais la syntaxe n'est pas inclus correcte, car chaîne fait référence à un module, pas un type de module (et le compilateur ne fait BARF). Comment puis-je me référer au type de module pour String ici (sans l'avoir explicitement écrit dans une expression sig)?

Merci!

Répondre

5

OCaml 3.12 aura une construction comme module type of M qui, je crois, aurait résolu votre problème. En attendant, vous pouvez demander au compilateur de générer la longue signature avec ocamlc -i. Désolé, mais je pense que c'est le meilleur que vous pouvez faire avec 3.11.