Haskell newbie and Python guy here.
I think I may be missing something here but if you look at Yesod's quickstart, the autor install some packages before cabal sandbox init
. I have seen the same pattern elsewhere. Questions:
cabal sandbox init
don't change PATH in order to match the sandboxed version?Thank you very much in advance!
Yes, this how to use a sandbox.
cabal sandbox init
will create some files / directories for you that will keep track of the packages you have installed.
cabal install some_package
will install that package into the sandbox.
You are more than welcome to install yesod-bin
into a sandbox.
Read point 2
cabal sandbox init
doesn't change your path, because it doesn't really need to. Just add PATH=.cabal-sandbox/bin:$PATH
in your .bash_profile
.
Unlike virtual-env, you never need to 'enable' or 'disable' a sandbox. You just cd
into a directory, and it is automatically enabled.
The only real downside I have found to cabal sandboxes, is that you need to be in the root directory in order to act upon a sandbox. Meaning, if you are in a sub-directory, running cabal install some_package
will not install it into the sandbox that is up a level, instead it will install it into either the global or user database, depending on how you have cabal
configured.
cabal exec
lets you execute a program in the context of a sandbox. It changes the path to include the bin
folder of the sandbox. You can see it by executing cabal exec printenv
inside the sandbox.
Also, the latest versions of cabal
let you create sandboxes in folders without .cabal
files. Once you run cabal sandbox init
, you can just cabal install
the dependencies you need.
So, to use different versions of yesod-bin
, install them in different sandboxes, and then invoke cabal exec yesod-bin
on each one.
(Extra tip: cabal exec gchi
is a useful command that makes ghci
aware of the contents of the sandbox.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With