OCaml:如何使用相同类型的Set参数创建归纳类型

时间:2016-03-14 22:21:50

标签: recursion types set ocaml

在OCaml中,我可以定义以下类型:

type mytype = Base of int
            | Branch of (int * (collection -> collection))
and collection = mytype list

假设我根据每个构造函数的int值定义了一个比较函数,我怎样才能将collection转换为Set而不是list

1 个答案:

答案 0 :(得分:4)

这是您需要使用递归模块的情况之一。事实上,您可以看到这是您在documentation of the feature中获得的实际示例。所以沿着这些方向应该做的事情:

module rec Mytype : sig
  type t = Base ...
  val compare : t -> t -> int
end = struct
  type t = Base ...
  let compare v0 v1 = ...
end
and Collection : Set.S with type elt = Mytype.t 
               = Set.Make (Mytype)