Cabal woe

Artem Pelenitsyn a.pelenitsyn at gmail.com
Wed Jul 10 14:05:24 UTC 2024


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
[3]: https://github.com/haskell/cabal/issues/9672
[4]: https://github.com/haskell/cabal/issues/7832
[5]: https://github.com/haskell/cabal/issues/6481

On Tue, Jul 9, 2024 at 4:58 AM Simon Peyton Jones <
simon.peytonjones at 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 at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20240710/f2b86dd3/attachment.html>


More information about the ghc-devs mailing list