Yeah. I think the real solution lies with cabal better knowing what libs ghc was baked/built with vs which can safely usually have a conflicting version in the user package db.  

This would be a nice use case for cabal / ghc-pkg better understanding private vs public dependencies too!  (Eg user ByteString vs ghc ByteString )

This is starting to sound like a bunch of good ideas to try on cabal! :-)

On Wednesday, April 9, 2014, Johan Tibell <johan.tibell@gmail.com> wrote:
On Wed, Apr 9, 2014 at 10:08 PM, Erik Hesselink <hesselink@gmail.com> wrote:
The only constraint that actually makes sense for template-haskell is
'installed', which I have in my cabal.config. I think this should
perhaps be built into cabal. This can then be combined with a
constraint on the known versions of TH a package works with.

Adding "installed" to the user supplied constraints for base, template-haskell, and ghc-prim sounds sensible.