(Ocaml) ошибка несвязанного модуля в визуальном коде

Я только начал изучать Ocaml. Я использую визуальный код в качестве своей IDE в Ubuntu, и у меня установлены расширение OCaml и merlin.

и у меня есть следующая проблема -

папка моей рабочей области содержит только 2 файла: a.ml и b.ml.

В файле a.ml я определил модуль с именем "COOL", а в файле b.ml я написал:

~ b.ml ~

open COOL;;

Я получаю сообщение об ошибке "Несвязанный модуль COOL merlin"

Есть ли способ заставить его видеть модуль в файле a.ml? Я попытался найти решение, я увидел что-то с makefile и.merlin и сборкой B, но я этого не понял, у меня нет ничего, кроме двух файлов, которые я упомянул. Я был бы счастлив, если бы кто-нибудь сказал мне, что именно нужно сделать, чтобы этот небольшой пример работал.

1 ответ

Решение

Tl ; доктор: делатьocamlc -c a.ml (или любой другой вашей команды компиляции), чтобы сгенерировать a.cmi файл, который Мерлин будет использовать для получения списка символов, определенных в модуле A.

Помимо того, что в b.ml ваш модуль действительно назван A.COOL (если только ты не open A перед open COOL), как упомянул glennsl, дело в том, что merlin насколько я знаю, только наблюдает за текущим редактируемым файлом, т.е. b.mlв твоем случае. Таким образом, чтобы иметь доступ к внешним символам, вам необходимо скомпилировать другие файлы (или, по крайней мере, их соответствующие.mli если они существуют), чтобы иметь соответствующие .cmi файлы, доступные Мерлину.

Это подразумевается в параграфе документации, описывающей пути сборки, в котором говорится, что "[merlin] должен знать, где найти cmi-файлы других модулей вашего проекта", т.е. эти файлы должны существовать в первую очередь.

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