4 ms·
(reposting my comment from Reddit) I don't understand why he wanted to reinstall things so often; it would have been much easier (and certainly faster) to just
by jmillikin 14y ago
(reposting my comment from Reddit)
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:
# Clean up whatever mess he's currently made
$ rm -rf ~/.cabal ~/.ghc
# Re-initialize Cabal
$ export PATH="$HOME/.cabal/bin:$PATH" # optionally add to .bashrc
$ cabal update
$ cabal install cabal-install cabal-dev
# Assuming that Yesod is using standard Haskell packaging properly, this
# should install Yesod in its own little sandbox so it won't destroy the rest
# of the system.
$ mkdir my-yesod-project
$ cd my-yesod-project
$ export PATH="$PWD/cabal-dev/bin:$PATH"
$ cabal-dev install yesod
# Now Yesod can be used without fear
$ yesod init .
$ cabal-dev install
- dllthomas 14y agoIdeally, getting a basic setup going shouldn't take a deep-read of the docs of my package manager. This is absolutely a weakness of the current Haskell ecosystem; perhaps not as bad as presented in the post here, but something that deserves improvement. 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.
- jmillikin 14y ago> 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.
- tedivm 14y ago>>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. 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.
- jmillikin 14y agoIn my experience, other package managers (my experience is with Python's and Ruby's) will behave just like Haskell's. Specifically, they do not seem to inspect the user's $PATH variable to determine whether their default installation directory is present.
- carterschonwald 14y agoI agree with everything you have posted.
- wowzer 14y agoHaving used both Haskell's package manager cabal and Python's pip and easy_install. Cabal has a long way to go before it's anything like pip. You can see cabal moving in the right direction, but pip is leagues ahead of it right now, especially when using virtualenv.