GHC_PACKAGE_PATH is the only one of those that it knows about. And the difference is that --package-db appends to the package database path, whereas GHC_PACKAGE_PATH sets the entire path. You would need an additional option to override the *user* entry on the standard package db path with that of the sandbox, to be compatible with how sandboxes work using only command line options.<br><br>On Friday, August 4, 2017, Emil Axelsson <<a href="mailto:78emil@gmail.com">78emil@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I guess I get your point in the general case with various tools working together. But in this case, only ghci is used, and it seems that it gets some information from the variables `CABAL_SANDBOX_CONFIG`, `CABAL_SANDBOX_PACKAGE_PATH` and `GHC_PACKAGE_PATH` (set by `cabal exec`) that it doesn't get from the flag `-package-db`.<br>
<br>
At least I find that a little strange.<br>
<br>
/ Emil<br>
<br>
Den 2017-08-04 kl. 16:58, skrev Brandon Allbery:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
ghc including ghci does not know about sandboxes. At all. That is what<br>
cabal/stack exec is for; it runs a command inside the sandbox.<br>
<br>
There are sandboxing mechanisms that don't require this, but they require<br>
your shell dotfiles to be set up in a way almost nobody does these days<br>
(proper separation of environment variables; otherwise you get things like<br>
the sandbox's package database, but the wrong $PATH). hsenv used to work<br>
that way.<br>
<br>
On Friday, August 4, 2017, Emil Axelsson <<a>78emil@gmail.com</a><br>
<javascript:_e(%7B%7D,'cvml','<a><wbr>78emil@gmail.com</a>');>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thanks for your reply! But I actually don't want `cabal repl`. The bigger<br>
picture is explained here:<br>
<br>
<a href="http://fun-discoveries.blogspot.com/2017/08/building-haskell" target="_blank">http://fun-discoveries.blogspo<wbr>t.com/2017/08/building-haskell</a><br>
-projects-with-ghc.html<br>
<br>
Towards the end of that post I suggest using `cabal exec` to integrate<br>
with a Cabal sandbox; however, as Daniel Trstenjak pointed out, that<br>
shouldn't be needed since `cabal-cargs` already sets the `-package-db` flag<br>
for GHC.<br>
<br>
So my question is why `cabal exec` is needed (in this particular case)<br>
even though `-package-db` is given?<br>
<br>
I know `cabal exec` sets a few environment variables<br>
(`CABAL_SANDBOX_CONFIG`, `CABAL_SANDBOX_PACKAGE_PATH` and<br>
`GHC_PACKAGE_PATH`). I've checked that these are all set correctly, so<br>
Cabal seems to be doing its job. But it's not clear why ghci gets confused<br>
when these variables are not set (and `-package-db` is given), but not when<br>
the variables are set.<br>
<br>
Cheers<br>
<br>
/ Emil<br>
<br>
Den 2017-08-04 kl. 15:31, skrev nek0:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Emil,<br>
<br>
What you want is hidden behind the `cabal repl` command, which starts<br>
ghci with the package-db of the sandbox.<br>
<br>
Greetings,<br>
<br>
nek0<br>
<br>
On 4.8.2017 13:41, Emil Axelsson wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi!<br>
<br>
I have a small file Test.hs alone in a directory:<br>
<br>
      {-# LANGUAGE DeriveGeneric #-}<br>
<br>
      module Test where<br>
<br>
      import Data.Hashable<br>
      import Data.Scientific<br>
      import GHC.Generics<br>
<br>
      data Sc = Sc Scientific deriving (Generic)<br>
<br>
      instance Hashable Sc<br>
<br>
To be able to load this file, I set up a Cabal sandbox:<br>
<br>
      $ ghc --numeric-version<br>
      8.0.2<br>
<br>
      $ cabal --numeric-version<br>
      1.24.0.2<br>
<br>
      $ cabal sandbox init<br>
      ...<br>
<br>
      $ cabal install hashable-1.2.6.0 scientific<br>
      ...<br>
<br>
(Note: not the latest version of hashable.)<br>
<br>
Now, if I try to run GHCi and point it to the sandbox' package database<br>
I get this error:<br>
<br>
      $ ghci<br>
-package-db=.cabal-sandbox/x86<wbr>_64-linux-ghc-8.0.2-packages.<wbr>conf.d<br>
Test.hs GHCi, version 8.0.2: <a href="http://www.haskell.org/ghc/" target="_blank">http://www.haskell.org/ghc/</a>  :? for help<br>
      [1 of 1] Compiling Test             ( Test.hs, interpreted )<br>
<br>
      Test.hs:12:14: error:<br>
          • No instance for (Hashable Scientific)<br>
              arising from a use of<br>
‘hashable-1.2.6.1:Data.Hashabl<wbr>e.Class.$dmhashWithSalt’<br>
          • In the expression:<br>
              hashable-1.2.6.1:Data.Hashable<wbr>.Class.$dmhashWithSalt @Sc<br>
            In an equation for ‘hashWithSalt’:<br>
                hashWithSalt<br>
                  = hashable-1.2.6.1:Data.Hashable<wbr>.Class.$dmhashWithSalt<br>
@Sc<br>
            In the instance declaration for ‘Hashable Sc’<br>
<br>
Somehow it mixes in version 1.2.6.1 of hashable, even though this<br>
package isn't installed (neither in the sandbox nor the global database).<br>
<br>
It turns out that wrapping the command in `cabal exec` fixes the problem:<br>
<br>
      $ cabal exec -- ghci<br>
-package-db=.cabal-sandbox/x86<wbr>_64-linux-ghc-8.0.2-packages.<wbr>conf.d<br>
Test.hs<br>
      GHCi, version 8.0.2: <a href="http://www.haskell.org/ghc/" target="_blank">http://www.haskell.org/ghc/</a>  :? for help<br>
      [1 of 1] Compiling Test             ( Test.hs, interpreted )<br>
      Ok, modules loaded: Test.<br>
      *Test><br>
<br>
Any idea what's going on?<br>
<br>
/ Emil<br>
______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/haskell-caf<wbr>e</a><br>
Only members subscribed via the mailman list are allowed to post.<br>
<br>
</blockquote>
______________________________<wbr>_________________<br>
</blockquote>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/haskell-caf<wbr>e</a><br>
Only members subscribed via the mailman list are allowed to post.<br>
</blockquote>
<br>
<br>
<br>
</blockquote>
</blockquote><br><br>-- <br><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div><br>