There is a somewhat weak prescriptive argument that one shouldn't use these things for long term usage, e.g. that you put, say a WrappedMonad shim on just for long enough to pass something and get a different dictionary, but really the result is it just makes code harder to test, debug and work with at a REPL and raises the question of what components should people be using when they DO need to embed such a thing in a place where it winds up visible or stored in a container.
I'm generally positive on adding these kinds of instances, especially where they don't require us to go out and lean on UndecidableInstances and the like.
-Edward