2010-05-05 11 views
6

W SML 3.11, chcę „przedłużyć” istniejący moduł za pomocą dyrektywy obejmują, tak jak poniżej:Korzystanie moduł to w SML

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

bez problemu. Ale teraz chcę jawnie ujawnić ten typ modułu (tj. W pliku .mli). Chcę coś takiego:

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

Ale to nie jest poprawna składnia String ponieważ odnosi się do modułu, a nie typu moduł (i kompilator robi rzeczywiście barf). Jak mogę odwołać się do typu modułu dla String tutaj (bez zapisywania go jawnie w wyrażeniu sig)?

Dzięki!

Odpowiedz

5

OCaml 3.12 będzie mieć konstrukcję taką jak module type of M, która prawdopodobnie rozwiązałaby Twój problem. Tymczasem kompilator może wygenerować długi podpis za pomocą ocamlc -i. Przepraszam, ale myślę, że to najlepsze, co możesz zrobić z 3.11.