Гетерогенные множества в OCaml - PullRequest
3 голосов
/ 09 июля 2010

предположим, у меня есть тип, определенный как

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.Это практический подход к тому, чего я пытаюсь достичь?

1 Ответ

7 голосов
/ 09 июля 2010

Set.Make функтор принимает модуль с подписью Set.OrderedType :

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

Для сравнения вы можете использовать Pervasives.compare если у вас нет требований к заказу и результатам, возвращенным min_elt / max_elt.Таким образом, параметр функтора может быть таким простым:

module T = struct type t = value let compare = compare end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...