2

我正在学习 Ocaml 语言,但是当我想编译模块时遇到了问题。所以,我有一个名为 Door 的模块和另一个名为 Case 的模块。在每个模块中,我都有一个类型参数和另一个模块:

Door.mli
type t = bool -> Case.u -> t

Case.mli
type u = bool -> Door.t -> u

当我想编译时,我有这个错误:文件“door.mli”,第 14 行,字符 23-29:错误:未绑定模块案例

你有想法吗?

谢谢

4

2 回答 2

2

您有两个相互递归的模块,这总是很棘手。让它们工作的一种方法是在同一个文件中使用module rec A ... and B ....

但是,您也有一个问题,即您的类型是循环的。定义:

type t = bool -> Case.u -> t

OCaml 通常也不接受。-rectypes您可以通过在编译器或解释器命令行上指定来接受它。

我担心你会发现这些结构很难使用。它们难以定义的原因是它们通常不是你想要的。如果可能,您可以尝试从更直接的类型开始。

于 2013-04-30T23:38:22.110 回答
1

我的建议:将这两种类型从door.mland中取出case.ml,并制作DoorCase依赖于一个通用Types模块:

type door = Door of bool -> case -> door
and case = Case of bool -> door -> case
于 2013-05-01T05:46:57.950 回答