Personally, I like to follow the mantra cabal is not a package manager . Because whenever I treat it like one, I get messed up in a bad way. I buy in to this argument[1] as to why it isn't. [1]: http://ivanmiljenovic.wordpress.com/2010/03/15/repeat-after-...
I wonder if Haskell will ever get a package manager like Nix.(?)
(setq haskell-process-type 'ghci
haskell-process-path-ghci "/home/ben/.nix-profile/bin/nix-shell"
haskell-process-args-ghci '("-I" "." "shell.nix" "--pure" "--command" "cabal configure; cabal repl"))
This drops you into a nix shell with all the dependencies for the project you're working on present.You can also (especially easy if you're using projectile) run compile with the command nix-shell -I . shell.nix --command "cabal configure; cabal build" and that give you a nice list of type errors in your current project.
Repeatable builds with no cabal hell. In the words of disney: "I'm never going back, the past is in the past!"