Module 类型+';Ocaml地图库中的t?

Module 类型+';Ocaml地图库中的t?,module,map,types,ocaml,Module,Map,Types,Ocaml,我正在使用Ocaml的内置地图库来解决一个问题集,但是我在访问地图本身的数据类型时遇到了问题。这应该是字典的第三个实现(前两个是列表和非平衡二叉搜索树),我必须实现的函子的一部分是“type dict”,它是实际字典的数据类型。对于list,dict类型为(D.key*D.value)list;对于树,dict类型为空| Branch((D.key*D.value),dict,dict)。Ocaml文档说明: type +'a t The type of maps from type key

我正在使用Ocaml的内置地图库来解决一个问题集,但是我在访问地图本身的数据类型时遇到了问题。这应该是字典的第三个实现(前两个是列表和非平衡二叉搜索树),我必须实现的函子的一部分是“type dict”,它是实际字典的数据类型。对于list,dict类型为(D.key*D.value)list;对于树,dict类型为空| Branch((D.key*D.value),dict,dict)。Ocaml文档说明:

type +'a t 
The type of maps from type key to type 'a.
这似乎是我需要的,但我似乎不能正确使用它。M是我的地图。顺便说一下,制作模块。我试过了

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

但我一直收到错误信息。有人能帮忙吗?非常感谢

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

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

要通过标准ocaml库中的map.Make创建映射,此文件将如下所示(对于从int到“a”的映射):

ocaml编译器将提供如下内容(当调用
ocamlc-imymap.ml
时):


“+”怎么不是一个语法结构?”每个类型参数的前缀可以是方差约束+(resp.-),表示参数是协变的(resp.逆变)。“from。它允许/不允许在变量和对象系统中使用子类型。当然,我的措辞是错误的。当然,几乎所有的东西都是“句法结构”,我编辑了我的答案。非常感谢!D.value M.t工作!非常感谢你的帮助。
module Intmap = Map.Make (struct
   type t = int
   let compare = Pervasives.compare
end)
module Intmap :
   sig
      type key = int
      type +'a t
      val empty : 'a t
      ...
end