
Am 10.12.20 um 12:23 schrieb Ignat Insarov:
Cabal is the second most used tool in Haskell after GHC. It has many problems. It may be noticed that there is one and a half developers working on it. This is clearly not enough to address these problems. I propose that this is a good place to invest in.
Cabal has *dramatically* improved over the years and since version 3.2 is working very smoothly for me. I generally favour cabal over stack because I like the extra flexibility in chosing package versions that cabal offers. Stack is also a very fine tool and has a slightly more polished UI.
It is ordinary to receive output like this:
``` % cabal run example-executable Warning: The package list for 'hackage.haskell.org' is 84 days old. Run 'cabal update' to get the latest list of available packages. Resolving dependencies... cabal: Could not resolve dependencies: [__0] trying: example-0.1.0.6 (user goal) [__1] next goal: opaleye (dependency of example) [__1] rejecting: opaleye-0.7.1.0, opaleye-0.7.0.0 (constraint from project config TODO requires ==0.6.7006.1) [__1] rejecting: opaleye-0.6.7006.1 (conflict: example => opaleye^>=0.7) [__1] skipping: opaleye-0.6.7006.0, opaleye-0.6.7005.0, opaleye-0.6.7004.2, opaleye-0.6.7004.1, opaleye-0.6.7004.0, opaleye-0.6.7003.1, opaleye-0.6.7003.0, opaleye-0.6.1.0, opaleye-0.6.0.0, opaleye-0.5.4.0, opaleye-0.5.3.1, opaleye-0.5.3.0, opaleye-0.5.2.2, opaleye-0.5.2.0, opaleye-0.5.1.1, opaleye-0.5.1.0, opaleye-0.5.0.0, opaleye-0.4.2.0, opaleye-0.4.1.0, opaleye-0.4.0.0, opaleye-0.3.1.2, opaleye-0.3.1, opaleye-0.3, opaleye-0.2, opaleye-0.6.7002.0, opaleye-0.6.7001.0, opaleye-0.6.7000.0, opaleye-0.5.2.1, opaleye-0.3.1.1 (has the same characteristics that caused the previous version to fail: excluded by constraint '^>=0.7' from example) [__1] fail (backjumping, conflict set: example, opaleye) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: opaleye, example ```
There are so many things that are wrong here.
The output is a bit verbose but the punch line at the end is pretty plain:
goals I've had most trouble fulfilling: opaleye, example
It doesn't take a PHD to conclude that you'll have to experiment with (usually: relax) the version bounds for these two packages to find a valid build plan. And the detailed output, however intimidating at first, is acually helpful to find out what goes wrong. I don't know how much effort goes into stackage (curating packages into coherent sets) but my guess is: quite a bit. Without that extra effort stack wouldn't be as useful as it is. Cheers Ben