
Claus Reinke wrote:
does anyone else feel that there is something wrong in haskell library land? i'm picking on cabal here as one of "the usual suspects", but it seems to have become the rule that otherwise stable code has to be fixed every so often, to accomodate new compiler versions, new library dependency versions, new cabal versions, new xyz versions,..
Wouldn't the fundamental solution to backward compatibility simply be to install old versions of a library? I mean, if the code only compiles with foo-1.0 but no longer with foo-2.2 then we'll just link against this old dependency foo-1.0. Viewed this way, backward compatibility of the API of foo-2.2 with foo-1.0 is just an optimization to save disk space since you don't have to keep two separate packages foo-1.0 and foo-2.2 around then. In general, I think that the notions "install" and "uninstall" are wrong for package management. IMHO, the right way is a purely functional one, along the lines of Nix http://nix.cs.uu.nl/index.html In essence, Nix treats every "package" (= populated directory tree) as a cell in some kind of _immutable_ memory (= disk space in this case). A set of installed packages corresponds to a set of allocated cells in memory. This is entirely analogous to storing Haskell values in memory. And not surprisingly, package contents can then be generated as values in a purely functional language, dependencies are just function arguments. Regards, apfelmus