(Imported from Trac #880, reported by lndbrg on 2011-08-31)
Cabal should be able to reinstall all dependencies of a package easily.
Steps to Reproduce:
all dependencies of foo is reinstalled.
No packages to be installed. All the requested packages are already installed.
If you want to reinstall anyway then use the --reinstall flag.
(Imported comment by @dcoutts on 2011-08-31)
Unfortunately it doesn't really make sense to talk about reinstalling all dependencies of something. Afterall, that includes base etc which either you cannot reinstall or do not want to reinstall. So you don't really mean /all/ dependencies. You mean the broken packages.
Now cabal cannot tell when packages are broken due to missing files, only due to missing package dependencies. So the solution to your problem is to unregister the packages that have the missing files. Then cabal install -only-dependencies will do the right thing.
So for example if you removed your ~/.cabal dir, then you can unregister the same packages by removing the ~/.ghc directory.
Perhaps the proper solution here is for cabal to notice when packages are broken due to missing files. That will have to wait 'til cabal does better package management (tracking files for uninstall).