Mutable Haskell data structure which combines a heap with a map to allow random heap access