OCaml:访问 Stdlib 中的类型

OCaml: accessing a type in the Stdlib

我想使用OCaml 的Stdlib 中的Stack 模块,但我还需要一个Stack 模块缺少的成员函数。因此,在 https://dev.realworldocaml.org/files-modules-and-programs.html 之后,我创建了一个文件 stack1.ml,内容为:

include Stack
let mem a t = List.mem a t.c

因为 cstack.ml 中使用的记录的名称(该文件包含行:type 'a t = { mutable c : 'a list; mutable len : int; })。但我得到:

Error: Unbound record field c

我能做什么? (还有:我需要一个不同名称的文件 Stack1 吗?这对于调用它的文件来说有点烦人。)

'a Stack.t 类型是使用可变列表或任何其他数据类型实现的,这一事实是由 Stack 模块的接口抽象出来的实现细节。

换句话说,在Stack模块之外,您只能使用独立于此实现的抽象类型'a Stack.t堆栈模块提供的功能。

幸运的是,这些功能足以实现 mem 功能。例如,使用 fold:

let mem x s = Stack.fold (fun acc y -> acc || x = y) false s