[Haskell-cafe] Do something about Cabal?

Ben Franksen ben.franksen at online.de
Sun Dec 20 16:59:47 UTC 2020


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



More information about the Haskell-Cafe mailing list