如何避免在Ocaml中隐藏stdlib模块?

时间:2015-09-15 21:58:51

标签: ocaml ocaml-core

我有一个程序使用Ocaml标准库中的Bytes模块,并打开文件顶部的Core_kernel.Std模块

open Core_kernel.Std

...

   let let buf = Bytes.make bom_len '\x00' in

我遇到的问题是最新版本的Core_kernel引入了一个新的Bytes模块,它模糊了标准库中的模块,导致Unbound value Bytes.make编译错误。

有没有办法解决这个命名问题而不删除文件顶部的open?如果我这样做,就需要改变很多东西。

2 个答案:

答案 0 :(得分:5)

您可以为Bytes模块提供替代名称:

module B = Bytes

open Core_kernel.Std

let buf = B.make 10 '\x00'

然后在代码中执行搜索替换,以Bytes更改B

另一种解决方案是避免使用open,但我猜你的代码需要进行大量更改。

答案 1 :(得分:3)

Core_kernel提供Caml模块,用于绑定标准库中可用的所有内容。

所以,你可以把它写成

open Core_kernel.Std

...

   let buf = Caml.Bytes.make bom_len '\x00' in

不幸的是,Caml.Bytes只有113.00.00版本中的added尚未在OPAM中。