2013-05-24 2 views
1

Я получаю ocamldoc предупреждения:ссылка конструктора типа в ocamldoc

Предупреждения: Элемент MyModule.VariantName не найден

при использовании {!MyModule.VariantName} в комментариях дока.


ocamldoc doc говорит

В этой главе мы используем слово элемент сослаться на какой-либо из следующих частей исходного файла OCaml: тип декларации, значение, модуль , исключение, тип модуля, конструктор типа, поле записи, класс, тип класса, метод класса, значение класса или классовое предложение наследования.

, а затем при объяснении форматирования текста:

| {! string }   вставить ссылку на элемент с именем строка. Строка должна быть полностью квалифицированным именем элемента, например Foo.Bar.t. Вид ссылочного элемента может быть принужден (полезно, когда различные элементы имеют одинаковое полное имя) со следующим синтаксисом: {! kind : string }, где вид может быть module, modtype, class, classtype, val, type, exception, attribute, method или section.

Можно ли использовать конструктор типа с использованием {! string }?

Как первая группа видов элементов относится ко второй группе видов элементов?

ответ

3

После того, как вы просмотрели реализацию, похоже, что можно ссылаться на конструктор вариантов, но с довольно странным синтаксисом: вы должны использовать синтаксис {!typename.constrname} или, от другого модуля, {!Modulename.typename.constrname}. Ниже приведен пример кода, например, {!mylist.Cons}. Это приведет к созданию гиперссылки, но, к сожалению, текст по-прежнему будет typename.constrname, а не только имя самого конструктора.

(Я также узнал, что есть «явный» способ сказать ocamldoc, к которому синтаксической категории упомянутый идентификатор принадлежит, я полагаю, чтобы помочь в какой-то двусмысленной случае. Так же, как вы могли бы использовать либо {!mylist} или {!type:mylist} для обозначения тип конструктор, вы можете использовать либо {!mylist.Nil}, либо {!const:mylist.Nil} для обозначения конструктора вариантов.)

Словарь Примечание: В объявлении типа

type 'a mylist = 
| Nil 
| Cons of 'a * 'a mylist 

имена Nil и Cons являются не называемые «конструкторы типа», но только «конструкторы» или «вариант Конструкторы». Конструкторы типов - это имена параметризованных типов (или непараметризированных для конструкторов с постоянным типом), живущих на уровне типа, а не уровня значения, mylist в этом примере.

+0

Ах. Спасибо за объяснение терминологии. Таким образом, две части документации не противоречат друг другу. Я ошибочно полагал, что «MyModule.MyVariantName» был элементом по первому определению. –

+1

@MikeSamuel: У меня был глубокий взгляд на то, как это работает, и кажется, что это действительно возможно. – gasche

Смежные вопросы