Использование модуля include в OCaml - PullRequest
6 голосов
/ 06 мая 2010

В OCaml 3.11 я хочу «расширить» существующий модуль с помощью директивы include, например:

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

Нет проблем. Но теперь я хочу явно указать тип этого модуля (то есть в файле .mli). Я хочу что-то вроде этого:

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

Но синтаксис include не корректен, потому что String ссылается на модуль, а не на тип модуля (а компилятор действительно делает barf). Как я могу ссылаться на тип модуля для String здесь (без явной записи в выражении sig)?

Спасибо!

1 Ответ

5 голосов
/ 06 мая 2010

OCaml 3.12 будет иметь такую ​​конструкцию, как module type of M, которая, я думаю, решит вашу проблему. Между тем, вы можете заставить компилятор генерировать длинную подпись с ocamlc -i. Извините, но я думаю, что это лучшее, что вы можете сделать с 3.11.

...