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