-
Notifications
You must be signed in to change notification settings - Fork 805
Stackage Server FAQ
If you already have installed some packages from Hackage or elsewhere and you want to start from a fresh package set, you can remove your ~/.ghc/<os>-<ghc-version>
directory.
For example, in my directory .ghc
I have:
$ ls ~/.ghc/
x86_64-linux-7.2.2 x86_64-linux-7.4.2
x86_64-linux-7.6.2 x86_64-linux-7.6.3
x86_64-linux-7.8.2
If I want to clear my GHC 7.2.2. environment, all the user-installed packages, I can remove the directory x86_64-linux-7.2.2
. Be careful that you are sure that you want to clear your package set (re-installing packages takes time!) and that you clear the right one.
On Windows the .ghc
directory might be in a directory like C:\Documents and Settings\HaskellCurry\
.
Now you can set Stackage as your remote-repo
and run cabal update
.
With hsenv you can simply edit the .cabal/config
file and replace
the remote-repo
line with the line indicated on the page of the
snapshot you want to use. Once this is done, run cabal update
and off you go!
There is currently no way to specify a remote-repo in a sandbox yet. There is an open issue for this. Once it is addressed you'll be able to have a snapshot per sandbox. Until then, you can either use a stackage globally, or embed your sandbox inside hsenv.
Imagine that Hackage has the following packages and versions:
- foo-1.0
- foo-1.1
- bar-1.0
- bar-1.1
And let's say that foo is in Stackage, but bar is not. Stackage will select (most likely) version 1.1 of foo, and confirm that it will compile and pass tests with all the other packages in in Stackage. Then, foo-1.1 will be included in the snapshot, both of inclusive and exclusive. foo-1.0 will not be included in either snapshot.
What about bar? Stackage can give no guarantees about any version of bar compiling and working with the rest of Stackage. So there are two choices:
- Don't include bar at all.
- Include some version- or many versions- of bar.
The first option is the safest: if a package is in the snapshot, you know it compiles. The second option introduces something quite arbitrary: which version of bar should we include? Arguably, the most sensible choice is "just include all versions of bar, and hope that cabal can figure it out."
The first option is our exclusive snapshots. The second option is our inclusive snapshots. The second option is useful when there are a number of packages not available in Stackage that you want to use, while still getting most of the benefits of Stackage.
But my real recommendation is: if you want to use a package not in the current Stackage snapshot, send a pull request, get it included, and then use the next exclusive snapshot that includes it.