在不同OCaml文件之间共享类型定义

在不同OCaml文件之间共享类型定义,ocaml,Ocaml,假设A.mlb.mlc.mld.ml都需要定义一些相同的类型 type a = ... type b = ... 因为我不想要重复的代码,所以我将这些类型定义放在一个文件Shared\u type.ml中,我将在a.ml、B.ml中执行Open Shared\u type 有没有更好、更优雅的方法来处理这个问题?另外,我觉得我的基本设计可能有问题。可能的改进是什么?是的,您应该将这些声明放在一个共享.mli文件中,该文件只包含声明,而不包含定义(您将在共享.ml中给出定义)。这一点在本文中进

假设A.mlb.mlc.mld.ml都需要定义一些相同的类型

type a = ... 
type b = ...
因为我不想要重复的代码,所以我将这些类型定义放在一个文件
Shared\u type.ml
中,我将在a.ml、B.ml中执行
Open Shared\u type


有没有更好、更优雅的方法来处理这个问题?另外,我觉得我的基本设计可能有问题。可能的改进是什么?

是的,您应该将这些声明放在一个
共享.mli
文件中,该文件只包含声明,而不包含定义(您将在
共享.ml
中给出定义)。这一点在本文中进行了解释


PS我强烈建议您在用OCaml编写任何严肃的东西之前,先阅读全部手册。

我不知道是否有必要阅读整个手册;这有点极端。但至少第一部分和第三部分的相关章节以及第四部分的std和core库。我相信至少快速阅读手册是有帮助的。例如,记住某些功能已经存在!如果您确实希望在每个模块中打开通用代码(但我不相信您的意图是这样),那么在4.02.0中,您可以在编译期间使用
-open
命令。