您如何解决OCaml循环构建错误?

问题描述 投票:1回答:1

我有产生循环构建错误的代码,然后我查找了该错误。本页给出了.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

在我看来,要构建一个定义类型的模块然后与其他文件共享该类型,这似乎是合理的,但是似乎循环构建错误总是可以防止这种情况。是否有一些“更适当”的方式来进行共享?

interface ocaml private public
1个回答
1
投票

您发布的代码完全没有错。它编译良好。因此问题出在您的.ml文件中。

您指向的页面显示的代码不正确。唯一要指出的是,如果您使用ocamlbuild,将会得到与直接编译文件时不同的错误。

关键是您不应在模块定义内使用模块名称。

代替此(以a.ml为单位):

type t
val x : A.t

您应该有这个:

type t
val x: t

如果您的代码确实类似于此示例,则只需删除.ml文件中的模块名称。

正如您所说,您想要做的是迄今为止最常用的模块。

© www.soinside.com 2019 - 2024. All rights reserved.