首页 > 解决方案 > 扩展 OCaml 模块

问题描述

有没有办法向 OCaml 中已经存在的模块添加功能?

具体来说,我有一些模块Loc可以跟踪源文件中的位置。我还有一个名为的模块Ast,它代表一些代码的抽象语法树。我希望在 中Loc.of_ast定义方法ast.ml,从而扩展Loc. 有没有办法做到这一点?

注意:这可能是 XY 问题。我倾向于相信这样的模块扩展是可能的原因是,在电池中,有诸如String.of_int和之类的方法Int.of_string,这意味着这些模块是相互递归的。当然,它们并没有完全定义在同一个文件中......

标签: moduleocaml

解决方案


您可以做的是创建一个新模块,称为现有模块,并将现有模块的include所有功能放入您的新模块中。新模块隐藏了现有模块,您可以使用所有新定义的功能。

顺便说一句,这就是电池的做法。

module List = struct
  include List

  let empty = []
end;;

List.empty;;
(* - : 'a list = [] *)

推荐阅读