gpt4 book ai didi

module - 在 OCaml 中从 Map 扩展模块

转载 作者:行者123 更新时间:2023-12-04 17:39:04 26 4
gpt4 key购买 nike

我有一个模块 StringMap由仿函数 Map.Make 构建给定一个类型 String :

module StringMap = Map.Make(String)

除了 Map 提供的普通操作,我想在这个模块中添加更多的定义,例如, my_own_function ,这样我就可以调用 StringMap.my_own_function .有谁知道我应该在哪里定义这种函数及其签名?

最佳答案

您可以使用 include新模块中的关键字以添加所有相同的功能。这也扩展到 signature in OCaml 3.12 .

module StringMap =
struct
include Map.Make(String)
end

如果你想访问 map 的结构,你必须添加一些 Obj.magic%identity特殊的外部功能。类型的重新定义必须准确,因为没有发生类型检查,
module Make (Ord : Map.OrderedType) =
struct
include Map.Make(Ord)

type 'a impl = Empty
| Node of 'a impl * key * 'a * 'a impl * int

external impl_of_t : 'a t -> 'a impl = "%identity"
external t_of_impl : 'a impl -> 'a t = "%identity"

let cardinal map =
let rec cardinal = function
| Empty -> 0
| Node(l,_,_,r,_) -> cardinal l + 1 + cardinal r
in
cardinal (impl_of_t map)

end

关于module - 在 OCaml 中从 Map 扩展模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8651331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com