
Simon Peyton-Jones
Well I didn't say it should *ignore* the database. The current database might influence its plan. For example if, after installing both yesod-platform and Fay, Cabal is asked to install a package P which depends on yesod-platform data-default 0.4-0.8, then Cabal could pick the already-installed version of yesod-platform depending on data-default 0.5, rather than installing yet another version depending on data-default-0.8.
So the invariant I suggest is * If it'd work in an empty database, it should work in any non-empty one * Installing X should never break the existing installation of Y
This makes a lot of sense to me. I think it is also time to admit that we are not the first trying to solve this problem. For example, Scala has the sbt tool: http://www.scala-sbt.org I am sure, it is not perfect, but it seems much more flexible and versatile than Cabal. Interestingly, the Scala guys were smart enough to avoid re-inventing the wheel and are using Apchae's Ivy http://ant.apache.org/ivy/ to do their dependency management. Manuel