A brief update:

I'm continuing to work on a priority queue implementation for containers.  I've pretty much settled on a variation on a binomial heap that actually has the type-checker guarantee the correct binomial structure.  It has the following properties:
The primary competing implementation is a pairing heap implementation, with the following properties:
For a simple heap sort, the pairing heap is just about twice as fast as the binomial heap, but I think having reasonable worst-case guarantees for containers users is important enough to dominate that concern.

There has also been some discussion of using priority search queues -- priority queues in which you can also find previously inserted elements -- but I think this is more appropriate for a separate package, and not something that is necessarily needed by most users.

I've also written a wide variety of utility functions, which you can see in the implementation here.  In particular, a number of Data.List functions are modified to apply to priority queues, including take, drop, splitAt, takeWhile, dropWhile, span, break, filter, and partition.  All of these are implemented asymptotically optimally.

Do people have any other thoughts?

Louis Wasserman
wasserman.louis@gmail.com
http://profiles.google.com/wasserman.louis