OCaml中的异构集

时间:2010-07-09 14:04:35

标签: set ocaml

假设我有一个定义为

的类型
type value =
      None
    | Int of int
    | Float of float
    | Complex of Complex.t
    | String of string
    | Char of char
    | Bool of bool

我希望能够使用Sets这些值。根据我的理解,我必须使用仿函数将Set模块与具体类型及其相关排序具体化。

在这个例子中我该怎么做?由于value无法直接在Set.Make仿函数中使用?

然后当然我需要能够给出这些值的完整排序,所以我应该发明一些东西,比如给不同类型的预定义顺序,然后按它们的有效值排序..我是对的吗?

例如,如果Int of int < Float of int,我可以决定Int x < Int yx < y。这是我实现目标的实用方法吗?

1 个答案:

答案 0 :(得分:7)

Set.Make仿函数使用带有签名Set.OrderedType的模块:

module type OrderedType = sig type t val compare : t -> t -> int end

如果您对min_elt / max_elt返回的订单和结果没有任何要求,则可以使用Pervasives.compare进行比较。因此,函子的参数可以简单如下:

module T = struct type t = value let compare = compare end