It doesn't work in *all* monads -- it only works in monads which
support a sensible notion of failure. This is exactly what is
captured by the MonadPlus constraint on my version of mLookup. And,
in fact, any monad in context of which you would want to use mLookup
(IO, Maybe, [], ...) are already instances of MonadPlus.