(Ocaml) 可视代码上的未绑定模块错误

(Ocaml) unbound module error on visual code

我刚开始学习Ocaml。 我在 Ubuntu 上使用视觉代码作为我的 IDE, 我安装了 OCaml 扩展和 merlin。

我遇到了以下问题 -

我的工作区文件夹仅包含 2 个文件: a.ml 和 b.ml.

在文件 a.ml 中,我定义了一个名为 "COOL" 的模块,在文件 b.ml 中,我写道:

~ b.ml ~

open COOL;;

我收到一条错误消息 "Unbound module COOL merlin"

有没有办法让它看到文件 a.ml 上的模块? 我试着寻找解决方案,我看到了 makefile 和 .merlin 和 B build 但我不明白,除了我提到的 2 个文件,我什么都没有。 如果有人能告诉我究竟应该做什么才能让这个小例子起作用,我会很高兴。

tl; dr: do ocamlc -c a.ml (或者任何你的编译命令)来生成 a.cmi 文件,merlin 将使用该文件来获取模块 A.[=22= 中定义的符号列表]

除了在 b.ml 中你的模块确实被命名为 A.COOL(除非你在 open COOL 之前 open A),正如 glennsl 提到的,关键是 merlin 是,据我所知,只看正在编辑的当前文件,即 b.ml 在你的情况下。为了访问外部符号,您因此需要编译其他文件(或者至少编译它们对应的 .mli,如果它们存在),以便 merlin 可以使用相关的 .cmi 文件。

这隐含在描述构建路径的文档的 paragraph 中,它说“[merlin] 需要知道在哪里可以找到项目其他模块的 cmi 文件”,即那些文件需要首先存在。