如何在 utop 中加载 .ml 文件及其对应的 .mli 文件?

How to load .ml file with its corresponding .mli file in utop?

简单地说,假设我在同一目录中有一个名为 moduleExample.ml 的实现文件和一个名为 moduleExample.mli.

的接口文件

我怎样才能将它们一起加载,从而使未在界面 moduleExample.mli 中列出的函数从 moduleExample.mlutop 中的签名中隐藏?另外,通过 moduleExample.mli 文件进行类型抽象怎么样?

我认为正确的方法,或者更一般地在顶层加载一个包含多个模块和接口的整个项目,是使用构建系统来编译所有模块并 link 它们在顶层中.

使用dune, you can do that by doing dune utop directory as described here。为了详尽无遗,这里有一个架构示例:

dune.ml

(library
  (name dummy)
  (wrapped false)
)

ex.ml

type t = int
let of_int x = x
let to_string = string_of_int
let add = (+)
let print x = print_string (to_string x)

ex.mli

type t
val of_int : int -> t
val print : t -> unit

通过 dune utop . 将所有内容加载到 utop,然后在模块 Ex 上使用 #show 指令,得到:

utop # #show Ex;;
module Ex : sig type t val of_int : int -> t val print : t -> unit end