OCaml:描述.mli文件中的模块

时间:2016-06-01 04:15:49

标签: ocaml

我正在使用Core.Std在.ml文件中生成一个Set和一个Map:

type temp = int with sexp, compare

type label = Symbol.symbol with sexp, compare

module Temp = struct
  type t = temp with sexp, compare
end
module TempComp = Comparable.Make(Temp)
module TempSet = TempComp.Set 
module TempMap = TempComp.Map

module Label = struct
  type t = label with sexp, compare
end
module LabelComp = Comparable.Make(Label)
module LabelMap = LabelComp.Map

我应如何在TempSet, TempMap, LabelMap文件中描述.mli

我说: module TempMap : Map.S with type t = temp

但我收到了一个错误:

  

在这个'with'约束中,t的新定义          与约束签名中的原始定义不匹配:          类型声明不匹配:            输入t = t          不包括在内            输入'a t =(Key.t,'a,Key.comparator_witness)Map.t

如何解决此错误?

1 个答案:

答案 0 :(得分:1)

'a t类型是一种从temp(一个键)到'a(任意数据)的地图。你想说的是,'a t是来自具体类型temp的键的地图,正确的做法是:

module TempMap : Map.S with type Key.t = temp

然而,虽然这是一种正确的做事方式但并不简单,因为它需要你深入了解地图的签名。常见的方法就是说:

type temp
module Temp : Comparable with type t = temp

并允许您的界面用户使用Temp.MapTemp.Set等。另外,请考虑使用更丰富的界面Identifiable,该界面还包括哈希表,哈希集和许多其他有用的和预期的东西。