Contrary to the thesis of the post, the haskell community seems to be well aware of this, and there are several attempts to fix it being actively worked on, just nothing particularly standardized yet. Meanwhile, cabal-dev lets people get work done.
> Ideally, getting a basic setup going shouldn't take a
> deep-read of the docs of my package manager.
Please name one package manager which installs binaries to the user's home directory, but doesn't require updating the user's $PATH.>Please name one package manager which installs binaries to the user's home directory, but doesn't require updating the user's $PATH.
Do you even realize how little those two statements follow each other? The whole red herring argument here is kind of annoying, but I'll hit it anyways- every package manager that I've used which installs binaries (or anything, really) in the user's home directory (or any directory really) does make me update the path- but it also tells me this and gives me sane errors when that hasn't happened.
2. Ivy/Maven. Dependencies are placed in ~/.ivy, and are available for use without changing environment variables.
3. rubygems. A ~/.gems directory is created that provides dependencies by ruby version, if you wish.
Now, running a clis still requires an addition to path. But package managers do exist that organize dependencies on the user path without explicit environment variable edition.
The problem he reports is that when he upgrades the Cabal binary by running 'cabal install cabal-install', the sequence of events is:
1. The system runs /usr/bin/cabal
2. Cabal fetches and builds the new binary
3. The new binary is installed to $HOME/.cabal/bin/
4. When he runs 'cabal update' again, it still uses /usr/bin/cabal because $HOME/.cabal/bin/ is not on his $PATH
I don't understand why he wanted to reinstall things so often; it would have been much easier (and certainly faster) to just install libraries once.
The first problem is that he didn't read any of the Cabal documentation. He complains that after upgrading his Cabal binary, that it still complains that an update is needed. I'm almost certain this is because he hasn't put the Cabal binary directory (~/.cabal/bin) on his $PATH. While this is arguably something that Cabal should be detecting and warning about, it's also not a requirement unique to Haskell -- any package manager that installs to a user's home directory will need them to change their $PATH.
Continuing on, he installs cabal-dev (good!), then proceeds to not use it. Instead, he tries to jam all of Yesod (a notoriously version-picky package) into his global package directory.
Then he uses cabal-dev to build his new site, and here's where things get weird. It should absolutely not install anything other than what his particular package needs as dependencies. If it's installing the world again, then there is something horribly misconfigured on his system.
Finally, I strongly object to Yesod being considered a "success story". While web frameworks are currently the hip thing, and Yesod is indeed a web framework, to my knowledge it's gained no significant userbase in part due to the huge nest of conflicting library versions that it depends on.
Here's what he needs to do: