2010-05-05 17 views
6

En OCaml 3.11, quiero "extender" un módulo existente utilizando la directiva de inclusión, así:módulo usando incluyen en OCaml

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

No hay problema. Pero ahora quiero exponer el tipo de este módulo explícitamente (es decir, en un archivo .mli). Quiero algo como esto:

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

Pero la incluyo la sintaxis no es correcta porque cadenas se refiere a un módulo, no un tipo de módulo (y de hecho lo hace el compilador de vomitar). ¿Cómo puedo consultar el tipo de módulo para String aquí (sin tener que escribirlo explícitamente en una expresión sig)?

Gracias!

Respuesta

5

OCaml 3.12 tendrá una construcción como module type of M que creo que habría resuelto su problema. Mientras tanto, puede hacer que el compilador genere la firma larga con ocamlc -i. Lo siento, pero creo que es lo mejor que puedes hacer con 3.11.