Monads provide a way of structuring functional programs.
Most real applications require a combination of primitive monads.
Here we describe how some monads may be combined with others to yield a combined monad . Efficient implementations of priority queues can often be clumsy beasts. We express a functional implementation of binomial queues which is both elegant and efficient. We also quantify some of the differences with other functional implementations. The operations decreaseKey and delete always pose a problem without destructive update, we show how our implementation may be extended to express these.