module type DICT = functor (Key : Set.OrderedType) -> sig type 'a dict val domain : 'a dict -> Set.Make(Key).t end;; module type PRIO_QUEUE = functor (Elt : Set.OrderedType) -> sig type queue val contents : queue -> Set.Make(Elt).t end;; module QueuedDict (Data : Set.OrderedType) (MyDict : DICT) (MyPrioQueue : PRIO_QUEUE) = struct module Dict = MyDict (Data) module PQ = MyPrioQueue (Data) module DataSet = Set.Make (Data) let queued_domain dict pq = DataSet.equal (Dict.domain dict) (PQ.contents pq) end;;