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

问题描述

我正在用沙丘开发一个大图书馆。让我们将此库称为L

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

我希望用户能够opam install L,然后以L.AL.B etc 的身份访问其他较小的库。

>

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

按照@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的显式主模块,则必须手动添加也会自动生成的模块别名。