在Ocaml Map Library中键入+'a t?

时间:2011-03-03 04:52:25

标签: module map types ocaml

我正在使用Ocaml的内置Map库来处理问题集,而我无法访问地图本身的数据类型。这应该是字典的第三个实现(前两个是列表和不平衡的二叉搜索树),我必须实现的部分函数是“type dict”,它是实际字典的数据类型。对于列表,键入dict是(D.key * D.value)列表;对于树,类型dict是Empty |分支((D.key * D.value),dict,dict)。 Ocaml文档说:

type +'a t 
The type of maps from type key to type 'a.

这看起来像我需要的,但我似乎无法正确使用它。顺便说一句,M是我的Map.Make模块。我试过了

type dict = M.t
type dict = M.+D.value t
type dict = M.+

但我不断收到错误消息。有人可以帮忙吗?非常感谢!

2 个答案:

答案 0 :(得分:7)

+是方差注释,它不是名称的一部分。参数化类型的语法是OCaml中的param type(param, param, ...) typeint list(int, string) Hashbl.t。你想要的是D.value M.t

答案 1 :(得分:4)

您可以通过询问ocaml编译器找出自己:ocamlc -i file.ml

要通过标准ocaml库中的Map.Make创建地图,此文件将如下所示(对于从int到'a的地图):

module Intmap = Map.Make (struct
   type t = int
   let compare = Pervasives.compare
end)

ocaml编译器会给你这样的东西(当调用ocamlc -i mymap.ml时):

module Intmap :
   sig
      type key = int
      type +'a t
      val empty : 'a t
      ...
end