The Haskell package manager, Cabal, ended up getting in the way of our development. It lets you specify version ranges of particular packages you want, but it’s important for everyone on the team to have exactly the same versions of every package. That means controlling transitive dependencies, and Cabal doesn’t really offer a way to handle this precisely.
This complaint was written in March 2014. When I looked up strategies for dealing with this problem, I found that Cabal 1.20, released April 2014, introduced a cabal freeze command that seems to do what the author wanted. This Stack Overflow answer says it’s basically equivalent to Ruby’s Gemfile system.
Freeze isn’t the real solution Haskell users use on a regular basis.
Sandboxes 1 (most projects are fine with this) and Stackage 2 (for Yesod particularly) are sufficient. Most people are fine with just cabal sandboxes. IMVU had trouble because they use Yesod which is notorious for its package dependencies. That’s when you use Stackage if you’re having trouble.
Using Stackage is tantamount to a freeze which is guaranteed to work with all packages in the set without needing to figure out a new solution when another package is added.
This complaint was written in March 2014. When I looked up strategies for dealing with this problem, I found that Cabal 1.20, released April 2014, introduced a
cabal freezecommand that seems to do what the author wanted. This Stack Overflow answer says it’s basically equivalent to Ruby’sGemfilesystem.Freeze isn’t the real solution Haskell users use on a regular basis.
Sandboxes 1 (most projects are fine with this) and Stackage 2 (for Yesod particularly) are sufficient. Most people are fine with just cabal sandboxes. IMVU had trouble because they use Yesod which is notorious for its package dependencies. That’s when you use Stackage if you’re having trouble.
Using Stackage is tantamount to a freeze which is guaranteed to work with all packages in the set without needing to figure out a new solution when another package is added.