ghc including ghci does not know about sandboxes. At all. That is what cabal/stack exec is for; it runs a command inside the sandbox.<div><br></div><div>There are sandboxing mechanisms that don't require this, but they require your shell dotfiles to be set up in a way almost nobody does these days (proper separation of environment variables; otherwise you get things like the sandbox's package database, but the wrong $PATH). hsenv used to work that way.<br><br>On Friday, August 4, 2017, Emil Axelsson <<a href="javascript:_e(%7B%7D,'cvml','78emil@gmail.com');" target="_blank">78emil@gmail.com</a>> wrote:<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 picture is explained here:<br>
<br>
<a href="http://fun-discoveries.blogspot.com/2017/08/building-haskell-projects-with-ghc.html" target="_blank">http://fun-discoveries.blogspo<wbr>t.com/2017/08/building-haskell<wbr>-projects-with-ghc.html</a><br>
<br>
Towards the end of that post I suggest using `cabal exec` to integrate with a Cabal sandbox; however, as Daniel Trstenjak pointed out, that shouldn't be needed since `cabal-cargs` already sets the `-package-db` flag for GHC.<br>
<br>
So my question is why `cabal exec` is needed (in this particular case) even though `-package-db` is given?<br>
<br>
I know `cabal exec` sets a few environment variables (`CABAL_SANDBOX_CONFIG`, `CABAL_SANDBOX_PACKAGE_PATH` and `GHC_PACKAGE_PATH`). I've checked that these are all set correctly, so Cabal seems to be doing its job. But it's not clear why ghci gets confused when these variables are not set (and `-package-db` is given), but not when the variables are set.<br>
<br>
Cheers<br>
<br>
/ Emil<br>
<br>
Den 2017-08-04 kl. 15:31, skrev nek0:<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>
<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.c<wbr>onf.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.Hashabl<wbr>e.Class.$dmhashWithSalt @Sc<br>
           In an equation for ‘hashWithSalt’:<br>
               hashWithSalt<br>
                 = hashable-1.2.6.1:Data.Hashable<wbr>.Class.$dmhashWithSalt @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.c<wbr>onf.d 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>
</blockquote></blockquote>
______________________________<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.</blockquote></div>
<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>