Have you tried stack? It was released about six months ago and has revolutionised Haskell's offering in this area.
How does stack help here?
In the end you still might have duplicated dependencies if you use different stackage.org releases but it's a much better situation than using Cabal sandboxes where every project has its own copy of dependencies.