Just my two cents as a haskell newbie that codes in enterprise:
I believe that most of the problems cited here are caused by the fact that cabal asks for too much information upfront. Usually in other languages you could just have a file with a list of dependencies and that’s it. You’d only need to fill all that extra info (package name, description, licence, version, author, maintainer, homepage, category, etc) when you are publishing it, which happens a lot less than just exploring code. It also doesn’t help that cabal still doesn’t have a command to add dependencies, like:
cabal init
cabal add QuickCheck
cabal repl
and having cabal detect current ghc/base and solving QuickCheck’s version (but still locally).
or even:
cabal repl
(inside repl): :add QuickCheck
and having cabal create a temporary project with the added dependencies
Having said that I believe that globally installed packages are evil and should be purged with fire (be it cabal-v1 or v2).