我想创建一个充当字典的和类型
type dict = Dict of Map.Make(String)
OCaml有可能吗?
答案 0 :(得分:4)
Map.Make(String)
是一个模块表达式,它返回一个模块,而不是一个类型。在这种情况下,由仿函数Map
的应用程序生成的地图类型为'a Map.Make.(String).t
。因此可以写
type 'a t = Dict of 'a Map.Make.(String).t
此时还有其他两个重要的评论。首先,要使用此类型,在某些时候需要实际计算模块表达式以获取模块。这就是为什么,编写
更为惯用module D = Map.Make(String)
type 'a t = Dict of 'a D.t
let empty = Dict D.empty
其次,只有一个类型和的构造函数表示这种类型的总和可能不是必需的。例如,类型sum可以在这里替换为类型别名:
module Dict = Map.Make(String)
type 'a t = 'a Dict.t