signature HeapSig = sig type Item type Heap exception Heap val empty : Heap val singleton : Item -> Heap val first : Heap -> Item val dequeue : Heap -> Item * Heap val union : Heap * Heap -> Heap end;