2010-05-05 9 views
6

In OCaml 3.11, voglio di "estendere" un modulo esistente utilizzando la direttiva include, in questo modo:modulo usando includono in OCaml

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

Nessun problema. Ma ora voglio esporre esplicitamente questo tipo di modulo (cioè in un file .mli). Voglio qualcosa di simile:

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

Ma la includo sintassi non è corretto perché stringa fa riferimento a un modulo, non un tipo di modulo (e il compilatore effettivamente barf). Come posso riferirmi al tipo di modulo per String qui (senza averlo scritto esplicitamente in un'espressione sig)?

Grazie!

risposta

5

OCaml 3.12 avrà un costrutto come module type of M che credo abbia risolto il problema. Nel frattempo, puoi fare in modo che il compilatore generi la lunga firma con ocamlc -i. Ci dispiace, ma penso che sia il meglio che puoi fare con 3.11.