Hi Simon,

The direct answer to your particular problem is that cabal-install-3.10.1 (which you're using) does not add `base` in the package environment created by `install --lib` by default.
So, to fix the problem you'd need to say `cabal install --lib base hashtables primitive` instead.
Better yet, you could upgrade your cabal-install to version 3.10.3 (recommended by GHCup), where this behavior was reversed (base is added by default).

To add to how brittle `install --lib` is: the 3.10.1 behavior (no base by default) bothered people [1] and was changed in 3.10.3 [2]. But the 3.10.3 behavior (add base by default) also bothers people [3]!
And note that although you have an easy way to solve your issue (add base in the list of libraries in the call to install --lib), the users of 3.10.3 who don't want base added by default don't have such an easy way.
(By easy I mean using only cabal CLI and don't edit env files manually, for example.)

More general, I think, it's possible to develop a mental model for today's `install --lib` (either 3.10.1 or 3.10.3, doesn't matter in the grand scheme),
and use it effectively for "little experiments" as advocated by Richard in the above-mentioned issue [4] (note that the issue was solved since!).
The prerequisite for that is to understand GHC environment files and that `install --lib` is mostly a (n incomplete) CLI interface to them.

Yet, people argue for a more holistic "environment" experience, see, e.g., the above mentioned [5] (the cabal-env issue)
or a very recent push from the old cabal sandboxes perspective: https://github.com/haskell/cabal/issues/10098
or this thread :-)

Also, (much in the spirit of Carthago delenda est) I try to conclude my every reply about install --lib with what's already mentioned by Tom:
always use `cabal install --lib` with `--package-env=.` It will save you a bunch of pain related to the "global state" (not all of it, perhaps).

--
Best, Artem

[1]: https://github.com/haskell/cabal/issues/8894
[2]: https://github.com/haskell/cabal/pull/8903

On Tue, Jul 9, 2024 at 4:58 AM Simon Peyton Jones <simon.peytonjones@gmail.com> wrote:
Friends

I'm trying to repro #25064 with my development build of GHC.  The test case depends on packages `primitive` and `hashtables`.  So I try this (see below).

Alas, apparently after the `cabal install`, it can't find Prelude.

What should I do?  I tried removing the "environments" file, whatever that is, which then meant it could find Prelude -- but the libraries were no longer installed.

I lack a decent model of what is going on with installing packages for my development builds.   Is there a write up anywhere?

Thanks

Simon


bash$ cabal install --lib hashtables primitive --with-compiler $HOME/code/HEAD/$s2
Warning: Unknown/unsupported 'ghc' version detected (Cabal 3.10.1.0 supports
'ghc' version < 9.8): /home/simonpj/code/HEAD/_build/stage1/bin/ghc is version
9.11.20240517
Warning: Unknown/unsupported 'ghc' version detected (Cabal 3.10.1.0 supports
'ghc' version < 9.8): /home/simonpj/code/HEAD/_build/stage1/bin/ghc is version
9.11.20240517
Resolving dependencies...
bash$  ~/code/HEAD/$s2 -c T25064.hs
Loaded package environment from
T25064.hs:1:8: error: [ ]8;;https://errors.haskell.org/messages/GHC-87110 \GHC-87110 ]8;; \]
    Could not load module ‘Prelude’.
    It is a member of the hidden package ‘base-4.20.0.0’.
    Use -v to see a list of the files searched for.
  |
1 | module Bug where
  |        ^^^

bash$ rm /home/simonpj/.ghc/x86_64-linux-9.11.20240517/environments/default
bash$ ~/code/HEAD/$s2 -c T25064.hs
T25064.hs:3:1: error: [ ]8;;https://errors.haskell.org/messages/GHC-61948 \GHC-61948 ]8;; \]
    Could not find module ‘Control.Monad.Primitive’.
    Perhaps you meant Control.Monad.Writer (from mtl-2.3.1)
    Use -v to see a list of the files searched for.
  |
3 | import Control.Monad.Primitive
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

T25064.hs:4:1: error: [ ]8;;https://errors.haskell.org/messages/GHC-87110 \GHC-87110 ]8;; \]
    Could not find module ‘Data.HashTable.ST.Basic’.
    Use -v to see a list of the files searched for.
  |
4 | import qualified Data.HashTable.ST.Basic as H
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs