解决模块名称冲突,需要获取ORD_MAP签名

Pat*_*ins 5 sml smlnj

我正在开发一个相对较大的SML代码库.它最初是用MLton编写的,但我现在正在SML/NJ下使用它.我需要使用RedBlackMapFn,其中定义了smlnj-lib.cm.但是,我收到一个错误:

elaborate/elaborate-bomenv.fun:9.20-9.27 Error: unbound signature: ORD_KEY
elaborate/elaborate-bomenv.fun:14.21-14.40 Error: unbound functor: RedBlackMapFn
elaborate/elaborate-bomenv.fun:32.20-32.27 Error: unbound signature: ORD_KEY
elaborate/elaborate-bomenv.fun:37.21-37.40 Error: unbound functor: RedBlackMapFn
Run Code Online (Sandbox Code Playgroud)

所以我认为这smlnj-lib.cm不是由CM拉动的.为了解决这个问题,我添加$/smlnj-lib.cm到了sources.cm我正在使用的目录中的文件中.这会导致一个单独的问题:

elaborate/sources.cm:25.1-25.18 Error: structure Random imported from $SMLNJ-LIB/Util/smlnj-lib.cm@243997(random.sml) and also from ./(sources.cm):lib/(sources.cm):basic/(sources.cm):random.sml
elaborate/sources.cm:25.1-25.18 Error: structure Queue imported from $SMLNJ-LIB/Util/smlnj-lib.cm@436143(queue.sml) and also from ./(sources.cm):lib/(sources.cm):basic/(sources.cm):two-list-queue.sml
Run Code Online (Sandbox Code Playgroud)

没有骰子.我尝试删除了Random来自的结构./(sources.cm):lib/(sources.cm):basic/(sources.cm):random.sml,但看起来它并不等同于标准库中定义的结构,所以我不能只用一个替换另一个.

我想使用类似Python的import ... from ... as ... 机制来为Random标准库提供一个新名称,但CM的文档没有提供任何关于我如何去做的提示.

如何解决跨多个SML文件的模块命名冲突?

Pat*_*ins 3

我最终将有问题的文件分成一个单独的.cm. 这里的问题文件是elaborate-bomenv.{sig, fun}. .cm该目录的文件是,sources.cm当它看起来像这样时会导致错误:

Group
...
is

$/basis.cm
...
elaborate-bomenv.fun
elaborate-bomenv.sig
...
Run Code Online (Sandbox Code Playgroud)

所以,我做了一个elaborate-bomenv-sources.cm看起来像这样的:

Group

signature ELABORATE_BOMENV
functor BOMEnv

is

$/smlnj-lib.cm
...
elaborate-bomenv.sig
elaborate-bomenv.fun
Run Code Online (Sandbox Code Playgroud)

并将原文改为sources.cm

Group
...
is

$/basis.cm
...
./elaborate-bomenv-sources.cm
...
Run Code Online (Sandbox Code Playgroud)

这很丑陋,但它有效。