我正在使用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
如何解决此错误?
答案 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.Map
,Temp.Set
等。另外,请考虑使用更丰富的界面Identifiable
,该界面还包括哈希表,哈希集和许多其他有用的和预期的东西。