The mtl-unleashed package

Classes MonadState and MonadReader without the functional
dependency from the monad to the contained type. This allows
more flexibility to extract bits and pieces of state based on
type, but increases ambiguities that need to be resolved with
extra type signatures.