6 votes

Utilisation du module include en OCaml

En OCaml 3.11, je veux "étendre" un module existant en utilisant la directive include, comme ceci :

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 include n'est pas correcte car String fait référence à un module, pas à un type de module (et le compilateur rejette en effet). Comment puis-je faire référence au type de module pour String ici (sans devoir l'écrire explicitement dans une expression sig) ?

Merci !

5voto

Pascal Cuoq Points 39606

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 mieux que vous puissiez faire avec la version 3.11.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X