[Haskell-cafe] capri cabal-dev virtualenv cab

Rogan Creswick creswick at gmail.com
Tue Nov 8 19:04:20 CET 2011

On Mon, Nov 7, 2011 at 11:40 PM, Rustom Mody <rustompmody at gmail.com> wrote:
> Does anyone give me a little comparison of these?

capri & cabal-dev:

Capri and cabal-dev both sandbox Haskell builds by restricting the set
of packages that cabal can see -- I haven't had much luck with capri
personally, and it appears to take a bit more doing to get a project
instantiated, but it does seem to restrict access to the system
package db, which cabal-dev does not do.  It doesn't look like capri
is under active development (only one release, roughly 18 months ago).

cabal-dev was created and is primarily maintained by Galois (I'm one
of the maintainers), and it's used extensively for day-to-day
development.  cabal-dev works by wrapping invocations of cabal with
the necessary configuration files and command line arguments to
restrict cabal's access to package databases to the system package db
and a per-project db.  In practice, this solves the vast majority of
version conflict issues, and it also allows you to confidently state
that your software will build with the software currently on Hackage.
However, it does /not/ provide any facilities for restricting or
switching the versions of ghc, and it also doesn't sandbox any other
external build tools (such as alex / happy).  That's not necessarily
out of scope, but we haven't needed it enough yet to implement.


I'm not familiar with virtualenv, but from skimming the site, it looks
like it does something very similar to cabal-dev, but focused on
python.  I'm not sure if it can be used with other languages /
arbitrary tools or not.


Others know cab much better than I do, but I'll take a shot.  I think
cab primarily provides a set of higher-level commands for managing a
ghc package database.  Amongst other things, it will show the complete
dependency tree for a package that is installed, and I think it wraps
'ghc-pkg unregister' more nicely, so you can unregister a package and
the packages that depend on it with one command.

It also wraps cabal-dev, I think, but I haven't used that bit, so I
don't know if it covers all the cabal-dev functionality yet.


> What would all my requirements be? Not sure... these seem important for me
> 1. Need to sandbox not just haskell-projects but ghc (different
> compilations/versions) itself
> 2. Stability of the (sandboxing) tool
> 3. Correcting the deficiencies of cabal (eg inability to uninstall,
> quarrels between cabal and apt etc)
> OS: Debian/testing
> System haskell: 7.0.4
> My question on beginners for a little more context:
> http://www.haskell.org/pipermail/beginners/2011-November/008943.html
> capri: http://www.haskell.org/haskellwiki/Capri
> virtualenv: https://github.com/Paczesiowa/virthualenv
> cabal-dev:
> http://corp.galois.com/blog/2010/12/20/cabal-dev-sandboxed-development-builds-for-haskell.html
> cab: http://www.mew.org/~kazu/proj/cab/en/
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

More information about the Haskell-Cafe mailing list