A hash-queue is a combination of a queue and a hashtable that supports constant-time lookup and removal of queue elements in addition to the usual queue operations (enqueue, dequeue). The queue elements are key-value pairs. The hashtable has one entry for each element of the queue.
Calls to functions that would modify a hash-queue (e.g. enqueue, dequeue,
remove, replace) detect if a client is in the middle of iterating over the
queue (e.g., iter, fold, for_all, exists) and if so, raise an exception.
module type S : sig ... end