Как создать документацию для OCaml на основе сигнатур модулей?

Я имею a.ml как это:

module type ASig = 
  sig 
    val do_something : unit -> int;;
  end ;;

module A:ASig = 
  struct 
    let do_something () = 1;;
    let do_secrectly () = 2;;
  end;;

Так что для моего модуля А интерфейс должен быть только do_something() ,


Но если я использую ocamldoc -html a.ml, хотя модуль sig объявляет взаимодействие, документ по-прежнему предоставляет все функции в модуле A, например:

module A: sig .. end
val do_something : unit -> int
val do_secrectly : unit -> int

Как я должен использовать ocamldoc так что все документы основаны на module sig ?

1 ответ

Решение

К сожалению, это невозможно в текущей реализации ocamldoc: она учитывает ограничения, но на чисто синтаксическом уровне она может использовать их только в том случае, если они имеют явную форму sig ... end вместо ссылки на существующий идентификатор (потому что анализ выполняется вручную по синтаксическому синтаксическому дереву, а не по типизированному дереву).

Вы также можете:

  • использовать .mli и документ там (если вы предоставите только.mli, только то, что в нем будет задокументировано)

  • или используйте разметку (**/**) попросить ocamldoc отказаться от остальной части модуля, типа модуля и т. д. перед функциями, которые вы хотите оставить закрытыми.

Другие вопросы по тегам