Question

When I build a Cabal project without a sandbox, Cabal uses existing libraries from my Haskell Platform installation. However, if I try to do the same inside a Cabal sandbox, Cabal forcibly rebuilds all my dependencies into the sandbox.

To save on build times and disk space, it'd be great to be able to instruct Cabal to use existing Haskell Platform libraries instead of rebuilding them. Is this possible?

Example (files in a gist):

executable blog
  hs-source-dirs:    .
  main-is:           Test.hs
  build-depends:     base >= 4.5 && < 5
                   , text

If I cabal build in the directory containing this .cabal file, my Test module gets built against the Haskell Platform version of text.

However, if I do the same in a sandbox:

cabal clean # (or alternatively clone an empty gist)
cabal sandbox init
cabal build

I get this:

$ cabal build
Package has never been configured. Configuring with default flags. If this
fails, please run configure manually.
Resolving dependencies...
Configuring install-test-0.1...
cabal: At least the following dependencies are missing:
text -any

If I now go and cabal install, the latest text library is built from scratch under my sandbox.

Was it helpful?

Solution

As per cabal-install bug #1695, this is currently not supported. It's something that may eventually be built, see multi-instance packages for more information.

If anyone's reading and cares, an alternative that should work for some users would be to share a single cabal sandbox among multiple projects. This way you could still keep your Haskell Platform installation separate from library installations you need during your development. More on that in An Introduction to Cabal sandboxes

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top