OCaml 和沙丘:将小型库集成到大型库中

OCaml and dune : Integrate small libraries in a larger library

我正在用 dune 开发一个大图书馆。我们称这个库为 L.

为避免造成大混乱,沙丘项目有许多较小的库:ABC、... 这些库相互依赖。

我希望用户能够 opam install L,然后访问 L.AL.B等[=49] =].

执行此操作的正确方法是什么?

根据@glennsl的评论进行编辑:

这是文件系统树:

l/
l/dune-project
l/a            <- This directory contains library A
l/a/dune
l/b            <- This directory contains library B
l/b/dune

l/a/dune 中:

(library
 (name a)
 (public_name l.a))

l/b/dune 中:

(library
 (name b)
 (public_name l.b)
 (libraries a)) 

l/a/dune-project 中:

(name l)

我找不到如何将 AB 公开为 L 的模块。

除非有一些配置设置干扰,这应该只是将其他库的模块导出为模块别名的问题:

(* L.ml (and L.mli) *)

module A = A
module B = B
module C = C

(* ... *)

这实际上是 dune 对命名空间库模块自动执行的操作。如果您还没有 L 的显式主模块,则必须手动添加本应自动生成的模块别名。