How does dependency hell happen in Cabal-install?
I read the following at Cabal/Survival - HaskellWiki:
1. What is the difficulty caused by C
One way dependency hell happens is when several different projects you are working on interfere. While a single project has a solvable constraint set, two different project might not and since they're sharing a single package DB, there will be trouble. This variant of dependency hell is solved by cabal sandboxes.
The problem is that you cannot link your program against those different versions of package C. A and B have to find a common version of C to use the same implementation of a certain function. One solution to this problem is OSGi but requires stuff like Classloaders which can be used to load different versions of package C in the same process w/o conflicts.
You have scenarios like this:
Where both B and C depend on A. However, if they were installed at different times, they may depend on different versions of A. For example, A version 1 export type T = Int
, but in version 2 it exports type T = Bool
.
Only when you try to build D do you expose the problem that B and C were build against different versions of A, and you can't compare T version 1
against T version 2
.