假设我有一个定义为
的类型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 y
和x < y
。这是我实现目标的实用方法吗?
答案 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