我有产生循环构建错误的代码,然后我查找了该错误。本页给出了.mli文件中类似但较小的示例:https://ocaml.org/learn/tutorials/ocamlbuild/New_kinds_of_build_errors.html
基本上,问题是我的文件既定义了类型,又定义了使用参数并返回相同类型值的函数。但是,这正是我希望程序执行的操作。我的类型不是私有的,它是在.mli文件中明确声明的:
type state = {
current_pos : int*int;
contents : int*int list;
}
val update_state : state -> state
在我看来,要构建一个定义类型的模块然后与其他文件共享该类型,这似乎是合理的,但是似乎循环构建错误总是可以防止这种情况。是否有一些“更适当”的方式来进行共享?
您发布的代码完全没有错。它编译良好。因此问题出在您的.ml文件中。
您指向的页面显示的代码不正确。唯一要指出的是,如果您使用ocamlbuild,将会得到与直接编译文件时不同的错误。
关键是您不应在模块定义内使用模块名称。
代替此(以a.ml为单位):
type t
val x : A.t
您应该有这个:
type t
val x: t
如果您的代码确实类似于此示例,则只需删除.ml文件中的模块名称。
正如您所说,您想要做的是迄今为止最常用的模块。