我正在开发一个相对较大的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文件的模块命名冲突?
我最终将有问题的文件分成一个单独的.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)
这很丑陋,但它有效。
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |