我正在学习Ocaml语言但是当我想编译它时我的模块有问题。 所以,我有一个名为Door的模块和另一个名为Case的模块。在每一个中,我有一个与另一个模块的类型参数:
Door.mli
type t = bool -> Case.u -> t
Case.mli
type u = bool -> Door.t -> u
当我想编译时,我有这个错误: 文件“door.mli”,第14行,字符23-29: 错误:未绑定模块案例
你有个主意吗?
谢谢你
答案 0 :(得分:2)
你有两个相互递归的模块,这总是很棘手。让它们工作的一种方法是使用module rec A ... and B ...
在同一个文件中定义它们。
但是,您还遇到了类型是循环的问题。定义:
type t = bool -> Case.u -> t
OCaml通常也不接受。您可以通过在编译器或解释器命令行上指定-rectypes
来接受它。
我担心你会发现这些结构难以使用。他们难以定义的原因是他们通常不是你想要的。如果可能的话,您可以尝试从更简单的类型开始。
答案 1 :(得分:1)
我的建议:从door.ml
和case.ml
中获取这两种类型,并使Door
和Case
依赖于常见的Types
模块:< / p>
type door = Door of bool -> case -> door
and case = Case of bool -> door -> case