Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cabal new-install allows linking against multiple versions of the same package when internal libraries are used #5782

Closed
vmchale opened this issue Dec 8, 2018 · 36 comments

Comments

@vmchale
Copy link
Contributor

vmchale commented Dec 8, 2018

Due to the vector package upgrade, the following happened:

vanessa@thinkpad ~/programming 🌸 cabal new-install ats-pkg
Resolving dependencies...
Build profile: -w ghc-8.6.2 -O1
In order, the following will be built (use -v for more details):
 - ats-pkg-3.2.4.4 (lib) (requires build)
 - ats-pkg-3.2.4.4 (exe:atspkg) (requires build)
Starting     ats-pkg-3.2.4.4 (lib)
Building     ats-pkg-3.2.4.4 (lib)

Failed to build ats-pkg-3.2.4.4.
Build log (
/home/vanessa/.cabal/logs/ghc-8.6.2/ats-pkg-3.2.4.4-220240a7fc982f1ef6dbbd3d7adca7552df6a1a213963e5fccd3aa4e9777ba0d.log
):
Warning: ats-pkg.cabal:52:5: The field "build-tools" is deprecated in the
Cabal specification version 2.0. Please use 'build-tool-depends' field
Configuring library for ats-pkg-3.2.4.4..
Warning: The package has an extraneous version range for a dependency on an
internal library: ats-pkg -any && ==3.2.4.4. This version range includes the
current package but isn't needed as the current package's library will always
be used.
Warning:
    This package indirectly depends on multiple versions of the same package. This is very likely to cause a compile failure.
      package ats-pkg (ats-pkg-3.2.4.4-a0502221d0d07ee100c04ace74149f498e46682acc88ea189fea506f5623b3ee) requires dhall-1.19.1-1fe9a070c032067f2d160ed443460097fec88c08fcd38d54eede84d5563dcb39
      package ats-pkg (ats-pkg-3.2.4.4) requires dhall-1.19.1-7f45d71c84a4f197a2691eb97907b8bd119d9ca492a802e003e397032de7b119
      package dhall (dhall-1.19.1-1fe9a070c032067f2d160ed443460097fec88c08fcd38d54eede84d5563dcb39) requires serialise-0.2.1.0-5d9662694e8f9b09c2f191eb32be6eef1ece0c9136b3ad50bb8f100ea14d93fa
      package dhall (dhall-1.19.1-7f45d71c84a4f197a2691eb97907b8bd119d9ca492a802e003e397032de7b119) requires serialise-0.2.1.0-c251b18b942c982fe79f40f9864275e9a5c111ad79cc6e4d869e0de51819b2a3
      package serialise (serialise-0.2.1.0-5d9662694e8f9b09c2f191eb32be6eef1ece0c9136b3ad50bb8f100ea14d93fa) requires vector-0.12.0.1-959b3278eb03c494c9c33864bcaa5e8ecf0455b6f6d8fd11e984803a63c05b49
      package dhall (dhall-1.19.1-1fe9a070c032067f2d160ed443460097fec88c08fcd38d54eede84d5563dcb39) requires vector-0.12.0.1-959b3278eb03c494c9c33864bcaa5e8ecf0455b6f6d8fd11e984803a63c05b49
      package serialise (serialise-0.2.1.0-c251b18b942c982fe79f40f9864275e9a5c111ad79cc6e4d869e0de51819b2a3) requires vector-0.12.0.2-7479aef3e2736f944c6682efd74d870b2a80551faaa63d55fd6849324aacdd74
      package dhall (dhall-1.19.1-7f45d71c84a4f197a2691eb97907b8bd119d9ca492a802e003e397032de7b119) requires vector-0.12.0.2-7479aef3e2736f944c6682efd74d870b2a80551faaa63d55fd6849324aacdd74
Preprocessing library for ats-pkg-3.2.4.4..
Building library for ats-pkg-3.2.4.4..
[ 1 of 14] Compiling Language.ATS.Package.Build.C ( src/Language/ATS/Package/Build/C.hs, dist/build/Language/ATS/Package/Build/C.o )
[ 2 of 14] Compiling Language.ATS.Package.Compiler ( src/Language/ATS/Package/Compiler.hs, dist/build/Language/ATS/Package/Compiler.o )
[ 3 of 14] Compiling Language.ATS.Package.Config ( src/Language/ATS/Package/Config.hs, dist/build/Language/ATS/Package/Config.o )
[ 4 of 14] Compiling Language.ATS.Package.Debian ( src/Language/ATS/Package/Debian.hs, dist/build/Language/ATS/Package/Debian.o )

src/Language/ATS/Package/Debian.hs:30:49: error:
    Ambiguous occurrence ‘Interpret’
    It could refer to either ‘Dhall.Interpret’,
                             imported from ‘Dhall’ at src/Language/ATS/Package/Debian.hs:17:1-57
                          or ‘Quaalude.Interpret’,
                             imported from ‘Quaalude’ at src/Language/ATS/Package/Debian.hs:18:1-25
                             (and originally defined in ‘dhall-1.19.1:Dhall’)
   |
30 |                      deriving (Generic, Binary, Interpret)
   |                                                 ^^^^^^^^^

src/Language/ATS/Package/Debian.hs:32:27: error:
    Ambiguous occurrence ‘Interpret’
    It could refer to either ‘Dhall.Interpret’,
                             imported from ‘Dhall’ at src/Language/ATS/Package/Debian.hs:17:1-57
                          or ‘Quaalude.Interpret’,
                             imported from ‘Quaalude’ at src/Language/ATS/Package/Debian.hs:18:1-25
                             (and originally defined in ‘dhall-1.19.1:Dhall’)
   |
32 | deriving newtype instance Interpret Version
   |                           ^^^^^^^^^
cabal: Failed to build ats-pkg-3.2.4.4 (which is required by exe:atspkg from
ats-pkg-3.2.4.4). See the build log above for details.

I believe that this is due to the fact that quaalude (an internal prelude for ats-pkg) depends on dhall. As the build report above attests, quaalude was not rebuilt in light of the vector upgrade; I'm guessing that cabal tried to link the old cached quaalude against the new dhall.

@23Skidoo
Copy link
Member

Would it be possible to come up with a small repro case?

@Mikolaj
Copy link
Member

Mikolaj commented Apr 1, 2019

I had something similar caused by executable depending on an internal library from its package and the whole (anonymous) library of this package as well (the internal library depended on the whole library as well). In the result, the build used two versions of the whole library (I suppose, it took the whole library already installed previously and then probably compiled the internal library again). Note the double LambdaHack-0.9.2.0 I got in the resulting GHC invocation below. And then the types didn't agree (diamond import problem).

/home/mikolaj/local/bin/ghc --make -no-link -fbuilding-cabal-package -O -static -dynamic-too -dynosuf dyn_o -dynhisuf dyn_hi -outputdir dist/build/LambdaHack/LambdaHack-tmp -odir dist/build/LambdaHack/LambdaHack-tmp -hidir dist/build/LambdaHack/LambdaHack-tmp -stubdir dist/build/LambdaHack/LambdaHack-tmp -i -idist/build/LambdaHack/LambdaHack-tmp -i. -idist/build/LambdaHack/autogen -idist/build/global-autogen -Idist/build/LambdaHack/autogen -Idist/build/global-autogen -Idist/build/LambdaHack/LambdaHack-tmp -optP-DEXPOSE_INTERNAL -optP-include -optPdist/build/LambdaHack/autogen/cabal_macros.h -hide-all-packages -Wmissing-home-modules -no-user-package-db -package-db /home/mikolaj/.cabal/store/ghc-8.6.4/package.db -package-db dist/package.conf.inplace -package-id LambdaHack-0.9.2.0-a7c34ede9fbe5003a576b423d350da0d5730db2cb6a652f723ca9ecfb60a1068 -package-id async-2.2.1-45c7ca69642e31eee366632f0f6a467f983c88dd506bf61251d398dcf2380ffb -package-id base-4.12.0.0 -package-id filepath-1.4.2.1 -package-id optparse-applicative-0.14.3.0-d393b12a3252b86b907e68eb87b7aad99a52214ca8ce4103c880d63091f5b5c6 -package-id LambdaHack-0.9.2.0-9a158d54bf6373fb45a79895f2fcf30566216bd35b1cdc1e729db72b2311b126 -XHaskell2010 -XMonoLocalBinds -XScopedTypeVariables -XOverloadedStrings -XBangPatterns -XRecordWildCards -XNamedFieldPuns -XMultiWayIf -XLambdaCase -XDefaultSignatures -XInstanceSigs -XMonadFailDesugaring -XStrictData -XCPP ./GameDefinition/Main.hs -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints -Wmissing-export-lists -Wpartial-fields -Wall-missed-specialisations -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively '-fsimpl-tick-factor=200' -threaded -rtsopts '-with-rtsopts=-A99m -I5' -hide-all-packages

If there is interest, I can create a branch to repro, but I doubt I could come up with a small example.

@23Skidoo
Copy link
Member

23Skidoo commented Apr 1, 2019

A repro case would surely be nice to have.

@Mikolaj
Copy link
Member

Mikolaj commented Apr 2, 2019

I'm not sure if the errors I'm getting are because I've broken my cabal DB and I don't want to rebuild all the packages to check, but I guess these are the steps to reproduce:

git clone [email protected]:LambdaHack/LambdaHack.git
git checkout 16e5632a10b116905e499f2dd83ca21d0a0be261
cabal new-install -j1 .

If it still doesn't fail, run make build-binary-common.

Edit: yes, after the first cabal new-install I'm getting:

[111 of 111] Compiling Game.LambdaHack.Server ( engine-src/Game/LambdaHack/Server.hs, dist/build/Game/LambdaHack/Server.o )
Installing library in /home/mikolaj/.cabal/store/ghc-8.6.4/incoming/new-16266/home/mikolaj/.cabal/store/ghc-8.6.4/LambdaHack-0.9.2.0-56057cd787510dbd25806ba030c9fa4b93b2b47e4ae53b132f90c891d3420c88/lib
Configuring library 'this-game-src' for LambdaHack-0.9.2.0..
Warning: The package has an extraneous version range for a dependency on an
internal library: LambdaHack -any && ==0.9.2.0 && ==0.9.2.0, LambdaHack -any
&& ==0.9.2.0 && ==0.9.2.0, LambdaHack -any && ==0.9.2.0 && ==0.9.2.0. This
version range includes the current package but isn't needed as the current
package's library will always be used.
Warning:
    This package indirectly depends on multiple versions of the same package. This is very likely to cause a compile failure.
      package LambdaHack (LambdaHack-0.9.2.0-56057cd787510dbd25806ba030c9fa4b93b2b47e4ae53b132f90c891d3420c88) requires LambdaHack-0.9.2.0-5b0dc036def60f06f6940d6a429cc3b629b69ff8b4aee5ec252420c45c6f6b1c
      package LambdaHack (LambdaHack-0.9.2.0-676585d43f680838e5e3a4128f88b52cca68663aec25e4171d9ad539cd40c0c3) requires LambdaHack-0.9.2.0-890c33178dfd0462bb18ef86a2499e4093fff66719206b0e07a2d739e7f53c67
Preprocessing library 'this-game-src' for LambdaHack-0.9.2.0..
Building library 'this-game-src' for LambdaHack-0.9.2.0..
[1 of 5] Compiling Client.UI.Content.Input ( GameDefinition/game-src/Client/UI/Content/Input.hs, dist/build/this-game-src/Client/UI/Content/Input.o )
[2 of 5] Compiling Client.UI.Content.Screen ( GameDefinition/game-src/Client/UI/Content/Screen.hs, dist/build/this-game-src/Client/UI/Content/Screen.o )
<command line>: can't load .so/.DLL for: libHSLambdaHack-0.9.2.0-890c33178dfd0462bb18ef86a2499e4093fff66719206b0e07a2d739e7f53c67.so (libHSLambdaHack-0.9.2.0-890c33178dfd0462bb18ef86a2499e4093fff66719206b0e07a2d739e7f53c67.so: cannot open shared object file: No such file or directory)
cabal: Failed to build lib:this-game-src from LambdaHack-0.9.2.0 (which is
required by exe:LambdaHack from LambdaHack-0.9.2.0).

@grayjay
Copy link
Collaborator

grayjay commented Apr 28, 2019

I wasn't able to reproduce the multiple versions error with LambdaHack. I tried running the first set of commands in #5782 (comment) with both cabal-install-2.4.1.0 and HEAD (27cf519 and 6316102), with GHC 8.6.4 and --index-state=2019-04-01T00:00:00Z.

Cabal listed five LambdaHack components to be built (main library, three internal libraries, and an executable), which seems correct:

In order, the following will be built (use -v for more details):
 - StateVar-1.1.1.1 (lib) (requires build)
 - base-compat-0.10.5 (lib) (requires build)
 - base-orphans-0.8.1 (lib) (requires build)
 - cabal-doctest-1.0.6 (lib) (requires build)
 - colour-2.3.4 (lib) (requires build)
 - happy-1.19.9 (exe:happy) (requires build)
 - hashable-1.2.7.0 (lib) (requires build)
 - haskell-lexer-1.0.2 (lib:haskell-lexer) (requires build)
 - hsini-0.5.1.2 (lib) (requires build)
 - minimorph-0.2.1.0 (lib) (requires build)
 - primitive-0.6.4.0 (lib) (requires build)
 - random-1.1 (lib) (requires build)
 - semigroups-0.18.5 (lib) (requires build)
 - tagged-0.8.6 (lib) (requires build)
 - th-abstraction-0.2.11.0 (lib) (requires build)
 - transformers-compat-0.6.2 (lib) (requires build)
 - contravariant-1.5 (lib:contravariant) (requires build)
 - ansi-terminal-0.9 (lib) (requires build)
 - unordered-containers-0.2.10.0 (lib) (requires build)
 - async-2.2.1 (lib) (requires build)
 - pretty-show-1.9.5 (lib) (requires build)
 - miniutter-0.5.0.0 (lib) (requires build)
 - vector-0.12.0.2 (lib) (requires build)
 - enummapset-0.6.0.1 (lib) (requires build)
 - distributive-0.6 (lib:distributive) (requires build)
 - transformers-base-0.4.5.2 (lib) (requires build)
 - exceptions-0.10.1 (lib) (requires build)
 - ansi-wl-pprint-0.6.8.2 (lib) (requires build)
 - assert-failure-0.1.2.2 (lib) (requires build)
 - vector-binary-instances-0.2.5.1 (lib) (requires build)
 - comonad-5.0.4 (lib:comonad) (requires build)
 - sdl2-2.4.1.0 (lib) (requires build)
 - optparse-applicative-0.14.3.0 (lib) (requires build)
 - bifunctors-5.5.3 (lib) (requires build)
 - sdl2-ttf-2.1.0 (lib) (requires build)
 - semigroupoids-5.3.2 (lib:semigroupoids) (requires build)
 - profunctors-5.3 (lib) (requires build)
 - free-5.1 (lib) (requires build)
 - keys-3.12.1 (lib) (requires build)
 - LambdaHack-0.9.2.0 (lib:definition) (requires build)
 - LambdaHack-0.9.2.0 (lib) (requires build)
 - LambdaHack-0.9.2.0 (lib:this-game-content) (requires build)
 - LambdaHack-0.9.2.0 (lib:this-game-src) (requires build)
 - LambdaHack-0.9.2.0 (exe:LambdaHack) (requires build)

Here is the end of the log, which corresponds to the log in the previous comment. I noticed that the components were built in a different order, with this-game-content built between the main library and this-game-src.

[111 of 111] Compiling Game.LambdaHack.Server ( engine-src/Game/LambdaHack/Server.hs, dist/build/Game/LambdaHack/Server.o )
Installing library in /home/kristen/projects/cabal-issue-5782/LambdaHack/store/ghc-8.6.4/incoming/new-12565/home/kristen/projects/cabal-issue-5782/LambdaHack/store/ghc-8.6.4/LambdaHack-0.9.2.0-45365d70b4c34f1e2426ec9f431c8ed718d6108dc42b391ef77ed6496a02c47e/lib
Configuring library 'this-game-content' for LambdaHack-0.9.2.0..
Warning: The package has an extraneous version range for a dependency on an
internal library: LambdaHack -any && ==0.9.2.0, LambdaHack -any && ==0.9.2.0,
LambdaHack -any && ==0.9.2.0. This version range includes the current package
but isn't needed as the current package's library will always be used.
Preprocessing library 'this-game-content' for LambdaHack-0.9.2.0..
Building library 'this-game-content' for LambdaHack-0.9.2.0..
[ 1 of 13] Compiling Content.CaveKind ( GameDefinition/Content/CaveKind.hs, dist/build/this-game-content/Content/CaveKind.o )
[ 2 of 13] Compiling Content.ItemKindActor ( GameDefinition/Content/ItemKindActor.hs, dist/build/this-game-content/Content/ItemKindActor.o )
[ 3 of 13] Compiling Content.ItemKindBlast ( GameDefinition/Content/ItemKindBlast.hs, dist/build/this-game-content/Content/ItemKindBlast.o )
[ 4 of 13] Compiling Content.ItemKindEmbed ( GameDefinition/Content/ItemKindEmbed.hs, dist/build/this-game-content/Content/ItemKindEmbed.o )
[ 5 of 13] Compiling Content.ItemKindOrgan ( GameDefinition/Content/ItemKindOrgan.hs, dist/build/this-game-content/Content/ItemKindOrgan.o )
[ 6 of 13] Compiling Content.ItemKindTemporary ( GameDefinition/Content/ItemKindTemporary.hs, dist/build/this-game-content/Content/ItemKindTemporary.o )
[ 7 of 13] Compiling Content.ModeKindPlayer ( GameDefinition/Content/ModeKindPlayer.hs, dist/build/this-game-content/Content/ModeKindPlayer.o )
[ 8 of 13] Compiling Content.ModeKind ( GameDefinition/Content/ModeKind.hs, dist/build/this-game-content/Content/ModeKind.o )
[ 9 of 13] Compiling Content.PlaceKind ( GameDefinition/Content/PlaceKind.hs, dist/build/this-game-content/Content/PlaceKind.o )
[10 of 13] Compiling Content.TileKind ( GameDefinition/Content/TileKind.hs, dist/build/this-game-content/Content/TileKind.o )
[11 of 13] Compiling Paths_LambdaHack ( dist/build/this-game-content/autogen/Paths_LambdaHack.hs, dist/build/this-game-content/Paths_LambdaHack.o )
[12 of 13] Compiling Content.RuleKind ( GameDefinition/Content/RuleKind.hs, dist/build/this-game-content/Content/RuleKind.o )
[13 of 13] Compiling Content.ItemKind ( GameDefinition/Content/ItemKind.hs, dist/build/this-game-content/Content/ItemKind.o )
Installing internal library this-game-content in /home/kristen/projects/cabal-issue-5782/LambdaHack/store/ghc-8.6.4/incoming/new-12565/home/kristen/projects/cabal-issue-5782/LambdaHack/store/ghc-8.6.4/LambdaHack-0.9.2.0-3ef0eeb42c642548415fb0cbcbaa3fbe960a6e9e427199bacecb00f5484ad082/lib
Configuring library 'this-game-src' for LambdaHack-0.9.2.0..
Warning: The package has an extraneous version range for a dependency on an
internal library: LambdaHack -any && ==0.9.2.0 && ==0.9.2.0, LambdaHack -any
&& ==0.9.2.0 && ==0.9.2.0, LambdaHack -any && ==0.9.2.0 && ==0.9.2.0. This
version range includes the current package but isn't needed as the current
package's library will always be used.
Preprocessing library 'this-game-src' for LambdaHack-0.9.2.0..
Building library 'this-game-src' for LambdaHack-0.9.2.0..
[1 of 5] Compiling Client.UI.Content.Input ( GameDefinition/game-src/Client/UI/Content/Input.hs, dist/build/this-game-src/Client/UI/Content/Input.o )
[2 of 5] Compiling Client.UI.Content.Screen ( GameDefinition/game-src/Client/UI/Content/Screen.hs, dist/build/this-game-src/Client/UI/Content/Screen.o )
[3 of 5] Compiling Implementation.MonadClientImplementation ( GameDefinition/game-src/Implementation/MonadClientImplementation.hs, dist/build/this-game-src/Implementation/MonadClientImplementation.o )
[4 of 5] Compiling Implementation.MonadServerImplementation ( GameDefinition/game-src/Implementation/MonadServerImplementation.hs, dist/build/this-game-src/Implementation/MonadServerImplementation.o )
[5 of 5] Compiling TieKnot          ( GameDefinition/game-src/TieKnot.hs, dist/build/this-game-src/TieKnot.o )
Installing internal library this-game-src in /home/kristen/projects/cabal-issue-5782/LambdaHack/store/ghc-8.6.4/incoming/new-12565/home/kristen/projects/cabal-issue-5782/LambdaHack/store/ghc-8.6.4/LambdaHack-0.9.2.0-3c4febbcbfe2f8767d32d8f8c475e0081f96ccb089b6ad34ef0ad4870035afd9/lib
Configuring executable 'LambdaHack' for LambdaHack-0.9.2.0..
Warning: The package has an extraneous version range for a dependency on an
internal library: LambdaHack -any && ==0.9.2.0 && ==0.9.2.0, LambdaHack -any
&& ==0.9.2.0 && ==0.9.2.0, LambdaHack -any && ==0.9.2.0 && ==0.9.2.0. This
version range includes the current package but isn't needed as the current
package's library will always be used.
Preprocessing executable 'LambdaHack' for LambdaHack-0.9.2.0..
Building executable 'LambdaHack' for LambdaHack-0.9.2.0..
[1 of 1] Compiling Main             ( GameDefinition/Main.hs, dist/build/LambdaHack/LambdaHack-tmp/Main.o )
Linking dist/build/LambdaHack/LambdaHack ...
Installing executable LambdaHack in /home/kristen/projects/cabal-issue-5782/LambdaHack/store/ghc-8.6.4/incoming/new-12565/home/kristen/projects/cabal-issue-5782/LambdaHack/store/ghc-8.6.4/LambdaHack-0.9.2.0-76a66c453004a2f5bf25042381deb9bd2cf76ec0ab906c08266a69d4c5af4b02/bin
Warning: The directory
/home/kristen/projects/cabal-issue-5782/LambdaHack/store/ghc-8.6.4/incoming/new-12565/home/kristen/projects/cabal-issue-5782/LambdaHack/store/ghc-8.6.4/LambdaHack-0.9.2.0-76a66c453004a2f5bf25042381deb9bd2cf76ec0ab906c08266a69d4c5af4b02/bin
is not in the system search path.
cabal: installdir is not defined. Set it in your cabal config file or use
--installdir=<path>

There was one directory for each LambdaHack component in the store afterwards.

Which version of cabal caused the error? Were any other packages installed? Do you know what index state was used or have a full log?

@Mikolaj
Copy link
Member

Mikolaj commented Apr 28, 2019

@grayjay: thank you for trying to repro. That was cabal version 3.0.0.0, somewhat older than my bug report. I can't tell the exact date. All deps were already installed. Can you try re-installing? I've just tried again with cabal from 6316102 and here's the full log: https://gist.github.com/Mikolaj/5661f4e69635e5c4f3c040ef211b1d68. Note how "indirectly depends on multiple" only appears when I run cabal again. Let me know if I can help any more.

@grayjay
Copy link
Collaborator

grayjay commented Apr 29, 2019

@Mikolaj Thanks for the log. I tried installing the dependencies separately, as well as making code changes to trigger a partial rebuild, but all of the commands succeeded.

I noticed that the first new-install in the log failed with some profiling errors:

Could not find module ‘Game.LambdaHack.Core.Prelude’
Perhaps you haven't installed the profiling libraries for package ‘LambdaHack-0.9.2.0’?

How is profiling enabled? I tried installing LambdaHack with --enable-profiling, but that failed due to #5982.

@Mikolaj
Copy link
Member

Mikolaj commented Apr 29, 2019

Profiling is enabled through my ~/.cabal/config file: https://gist.github.com/Mikolaj/da6494a16d6f121eefad1930394de699

@Mikolaj
Copy link
Member

Mikolaj commented Apr 29, 2019

I do remember meddling with cabal package DB before originally posting about the error. Some ghc-pkg invocations, perhaps even some raw deletions from .cabal or .ghc. So now I've removed both .cabal or .ghc and started in a fresh clone of the repo. Compilation succeeded. Then I turned on profiling in ~/.cabal/config (no other changes) and tried again. It recompiled everything and now I'm getting "indirectly depends on multiple versions" again.

@Mikolaj
Copy link
Member

Mikolaj commented Apr 29, 2019

I'm now even getting this:

[ 18 of 111] Compiling Game.LambdaHack.Common.Perception ( engine-src/Game/LambdaHack/Common/Perception.hs, dist/build/Game/LambdaHack/Common/Perception.o )

engine-src/Game/LambdaHack/Common/Perception.hs:43:23: error:
    • No instance for (Binary (ES.EnumSet Point))
        arising from the 'deriving' clause of a data type declaration
      Possible fix:
        use a standalone 'deriving instance' declaration,
          so you can specify the instance context yourself
      There are instances for similar types:
        instance (Enum k, Binary k) =>
                 Binary (enummapset-0.6.0.1:Data.EnumSet.EnumSet k)
          -- Defined in ‘Game.LambdaHack.Core.Prelude’
    • When deriving the instance for (Binary PerVisible)
   |
43 |   deriving (Show, Eq, Binary)
   |                       ^^^^^^

which looks like some file corruption to me.

@phadej
Copy link
Collaborator

phadej commented Apr 29, 2019

@Mikolaj I don't see any Binary EnumSet instance in https://hackage.haskell.org/package/enummapset-0.6.0.1/docs/Data-EnumSet.html, so that error feels valid?

@Mikolaj
Copy link
Member

Mikolaj commented Apr 29, 2019

Well, yes, the instance is here:

https://github.com/LambdaHack/LambdaHack/blob/16e5632a10b116905e499f2dd83ca21d0a0be261/definition-src/Game/LambdaHack/Core/Prelude.hs#L85

but the anonymous library depends on the definition library

https://github.com/LambdaHack/LambdaHack/blob/16e5632a10b116905e499f2dd83ca21d0a0be261/LambdaHack.cabal#L330

so it should be included.

Edit: Which is why it compiles fine most of the time.

@phadej
Copy link
Collaborator

phadej commented Apr 29, 2019

Oh, I see.

    • No instance for (Binary (ES.EnumSet Point))

yet

      There are instances for similar types:
        instance (Enum k, Binary k) =>
                 Binary (enummapset-0.6.0.1:Data.EnumSet.EnumSet k)

if it's reproducible, at least on your machine. Could you upload here the plan.json (found in dist-newstyle/cache/plan.json)

@Mikolaj
Copy link
Member

Mikolaj commented Apr 29, 2019

@phadej, @grayjay: Yes, it's reproducible, but only once. Then, on a second run (even after cabal new-clean; cabal clean, it exhibits the Could not find module ‘Game.LambdaHack.Core.Prelude’ error instead. So then you have to wipe out ~/.cabal again, do cabal new-update and do

git clone [email protected]:LambdaHack/LambdaHack.git
cd LambdaHack/
git checkout 16e5632a10b116905e499f2dd83ca21d0a0be261
cabal new-install -j1 .

it will succeed. Then set library-profiling: True in ~/.cabal/config, do cabal new-install -j1 . and wait until it all rebuilds. Only then you get the error (if you enable profiling in the first run, I think, it just succeeds, but the evidence has scrolled pass the terminal memory threshold, so I'm not sure). The resulting plan.json after the error is

{"cabal-version":"3.0.0.0","cabal-lib-version":"3.0.0.0","compiler-id":"ghc-8.6.4","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-2.4.0.1","pkg-name":"Cabal","pkg-version":"2.4.0.1","depends":["array-0.5.3.0","base-4.12.0.0","binary-0.8.6.0","bytestring-0.10.8.2","containers-0.6.0.1","deepseq-1.4.4.0","directory-1.3.3.0","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.13.0","pretty-1.1.3.6","process-1.6.5.0","text-1.2.3.1","time-1.8.0.2","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"LambdaHack-0.9.2.0-inplace","pkg-name":"LambdaHack","pkg-version":"0.9.2.0","flags":{"curses":false,"gtk":false,"jsaddle":false,"release":true,"sdl":false,"supportnodejs":true,"vty":false,"with_expensive_assertions":false},"style":"local","pkg-src":{"type":"local","path":"/home/mikolaj/teeeeeeeeee/LambdaHack/."},"dist-dir":"/home/mikolaj/teeeeeeeeee/LambdaHack/dist-newstyle/build/x86_64-linux/ghc-8.6.4/LambdaHack-0.9.2.0","depends":["assert-failure-0.1.2.2-de21f694cfb032c206fedaa9442e732d1186f4a27230fdc2bb9773274c8750bb","async-2.2.1-a29a918450bee8d046c58a121c671da6839cfbb80b5b32f0a9ca853cbace885a","base-4.12.0.0","base-compat-0.10.5-fee28ad71dd44827dc075d41b834ac9da6d6ecd02e891f209c43aee6f75a7bf9","binary-0.8.6.0","bytestring-0.10.8.2","containers-0.6.0.1","deepseq-1.4.4.0","LambdaHack-0.9.2.0-inplace-definition","directory-1.3.3.0","enummapset-0.6.0.1-cbfb66ef51822a4c1d06bf9eceded8b1198483840a1662eb75fe500992859d27","filepath-1.4.2.1","ghc-prim-0.5.3","hashable-1.2.7.0-1cee4bfd1838b26e163c3668c53516b65d131b9ca3b098530757e34bd545b38c","hsini-0.5.1.2-2ae2483135a10ab5c1a5385681b898db46bbf5a7cbec0c280679b9ddabab4840","keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e","miniutter-0.5.0.0-726355ba622057bc102c23edb53a65a861e6e8a97442a4caf1fbe37d1659e74b","optparse-applicative-0.14.3.0-cc35318103c80637869ae03e6b1fa1338334d8b503c5315d3d4b653e94ce626d","pretty-show-1.9.5-e7a5481be560984824f74c167902aef106a46edc2309a36adf249e501070ae76","primitive-0.6.4.0-e60c0400f5d0d0400adbdd3b58d2ae4bf01a12cc9b441a8fd7e2e2b1b623cdc4","random-1.1-b83f3cc2d1fbfe2c01fc9b01fe0bb59963f3fc47d7c811bd6540506a70d12ffb","sdl2-2.4.1.0-515ac05e7e03749e7d297e83741eba2961eee5070d1e5bcc1e6108d02ccd756f","sdl2-ttf-2.1.0-8bd646c43c5de18e9ebcf9eb429cafa9b1adda94b5e0e94fbfeaefbb6337458b","stm-2.5.0.0","text-1.2.3.1","time-1.8.0.2","transformers-0.5.6.2","unordered-containers-0.2.10.0-90bca1e4730e255542829df4d22abd8adf214a406e12cfbbe249329a1125ed8a","vector-0.12.0.2-faf07d1a6670dd58ab9d04d621cf978482c959a6c8bfeffb081d99d95bbe0610","vector-binary-instances-0.2.5.1-845df65ae676a80e5571a2ca8826a981f3dcb50a65776051d2d357a08ef3937a","zlib-0.6.2-1df97b1652f6747a2a2e0831c8a3fe269d7654697302b1c8c63453af10f68d77"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"LambdaHack-0.9.2.0-inplace-LambdaHack","pkg-name":"LambdaHack","pkg-version":"0.9.2.0","flags":{"curses":false,"gtk":false,"jsaddle":false,"release":true,"sdl":false,"supportnodejs":true,"vty":false,"with_expensive_assertions":false},"style":"local","pkg-src":{"type":"local","path":"/home/mikolaj/teeeeeeeeee/LambdaHack/."},"dist-dir":"/home/mikolaj/teeeeeeeeee/LambdaHack/dist-newstyle/build/x86_64-linux/ghc-8.6.4/LambdaHack-0.9.2.0/x/LambdaHack","depends":["LambdaHack-0.9.2.0-inplace","async-2.2.1-a29a918450bee8d046c58a121c671da6839cfbb80b5b32f0a9ca853cbace885a","base-4.12.0.0","filepath-1.4.2.1","optparse-applicative-0.14.3.0-cc35318103c80637869ae03e6b1fa1338334d8b503c5315d3d4b653e94ce626d","LambdaHack-0.9.2.0-inplace-this-game-src"],"exe-depends":[],"component-name":"exe:LambdaHack","bin-file":"/home/mikolaj/teeeeeeeeee/LambdaHack/dist-newstyle/build/x86_64-linux/ghc-8.6.4/LambdaHack-0.9.2.0/x/LambdaHack/build/LambdaHack/LambdaHack"},{"type":"configured","id":"LambdaHack-0.9.2.0-inplace-definition","pkg-name":"LambdaHack","pkg-version":"0.9.2.0","flags":{"curses":false,"gtk":false,"jsaddle":false,"release":true,"sdl":false,"supportnodejs":true,"vty":false,"with_expensive_assertions":false},"style":"local","pkg-src":{"type":"local","path":"/home/mikolaj/teeeeeeeeee/LambdaHack/."},"dist-dir":"/home/mikolaj/teeeeeeeeee/LambdaHack/dist-newstyle/build/x86_64-linux/ghc-8.6.4/LambdaHack-0.9.2.0/l/definition","depends":["assert-failure-0.1.2.2-de21f694cfb032c206fedaa9442e732d1186f4a27230fdc2bb9773274c8750bb","base-4.12.0.0","base-compat-0.10.5-fee28ad71dd44827dc075d41b834ac9da6d6ecd02e891f209c43aee6f75a7bf9","binary-0.8.6.0","containers-0.6.0.1","deepseq-1.4.4.0","enummapset-0.6.0.1-cbfb66ef51822a4c1d06bf9eceded8b1198483840a1662eb75fe500992859d27","ghc-prim-0.5.3","hashable-1.2.7.0-1cee4bfd1838b26e163c3668c53516b65d131b9ca3b098530757e34bd545b38c","keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e","miniutter-0.5.0.0-726355ba622057bc102c23edb53a65a861e6e8a97442a4caf1fbe37d1659e74b","random-1.1-b83f3cc2d1fbfe2c01fc9b01fe0bb59963f3fc47d7c811bd6540506a70d12ffb","text-1.2.3.1","time-1.8.0.2","transformers-0.5.6.2","unordered-containers-0.2.10.0-90bca1e4730e255542829df4d22abd8adf214a406e12cfbbe249329a1125ed8a","vector-0.12.0.2-faf07d1a6670dd58ab9d04d621cf978482c959a6c8bfeffb081d99d95bbe0610","vector-binary-instances-0.2.5.1-845df65ae676a80e5571a2ca8826a981f3dcb50a65776051d2d357a08ef3937a"],"exe-depends":[],"component-name":"lib:definition"},{"type":"configured","id":"LambdaHack-0.9.2.0-inplace-this-game-content","pkg-name":"LambdaHack","pkg-version":"0.9.2.0","flags":{"curses":false,"gtk":false,"jsaddle":false,"release":true,"sdl":false,"supportnodejs":true,"vty":false,"with_expensive_assertions":false},"style":"local","pkg-src":{"type":"local","path":"/home/mikolaj/teeeeeeeeee/LambdaHack/."},"dist-dir":"/home/mikolaj/teeeeeeeeee/LambdaHack/dist-newstyle/build/x86_64-linux/ghc-8.6.4/LambdaHack-0.9.2.0/l/this-game-content","depends":["base-4.12.0.0","LambdaHack-0.9.2.0-inplace-definition","filepath-1.4.2.1","template-haskell-2.14.0.0","text-1.2.3.1"],"exe-depends":[],"component-name":"lib:this-game-content"},{"type":"configured","id":"LambdaHack-0.9.2.0-inplace-this-game-src","pkg-name":"LambdaHack","pkg-version":"0.9.2.0","flags":{"curses":false,"gtk":false,"jsaddle":false,"release":true,"sdl":false,"supportnodejs":true,"vty":false,"with_expensive_assertions":false},"style":"local","pkg-src":{"type":"local","path":"/home/mikolaj/teeeeeeeeee/LambdaHack/."},"dist-dir":"/home/mikolaj/teeeeeeeeee/LambdaHack/dist-newstyle/build/x86_64-linux/ghc-8.6.4/LambdaHack-0.9.2.0/l/this-game-src","depends":["LambdaHack-0.9.2.0-inplace","async-2.2.1-a29a918450bee8d046c58a121c671da6839cfbb80b5b32f0a9ca853cbace885a","base-4.12.0.0","enummapset-0.6.0.1-cbfb66ef51822a4c1d06bf9eceded8b1198483840a1662eb75fe500992859d27","filepath-1.4.2.1","ghc-compact-0.1.0.0","optparse-applicative-0.14.3.0-cc35318103c80637869ae03e6b1fa1338334d8b503c5315d3d4b653e94ce626d","primitive-0.6.4.0-e60c0400f5d0d0400adbdd3b58d2ae4bf01a12cc9b441a8fd7e2e2b1b623cdc4","random-1.1-b83f3cc2d1fbfe2c01fc9b01fe0bb59963f3fc47d7c811bd6540506a70d12ffb","template-haskell-2.14.0.0","text-1.2.3.1","LambdaHack-0.9.2.0-inplace-this-game-content","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib:this-game-src"},{"type":"configured","id":"StateVar-1.1.1.1-73e71bfbcb522789e12d81482b7d07b4b01bd2b01c482003862134cc937920c3","pkg-name":"StateVar","pkg-version":"1.1.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cd3b516a49faf0627ea31885e012611e63600824976dcb276bcb2e92cdb0790f","pkg-src-sha256":"eb6436516ab2d5e3d3e070b5a1595c4dceea760a58a9cc8d23dad5f6008f2223","depends":["base-4.12.0.0","stm-2.5.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ansi-terminal-0.9-02cef318fc6e2d84dc8adb1ff4af9a08994cbe46397965968fe470e14ad9ea7c","pkg-name":"ansi-terminal","pkg-version":"0.9","flags":{"example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"24e357bccd882add0d9caee63136d6b7923aaa9e36ed515097230dca82b0065c","pkg-src-sha256":"d755c2c0f2819cd7fe198a6aa58e60a88ae532cd69467e1111c8839b83c0ac03","depends":["base-4.12.0.0","colour-2.3.4-015c6cdaab31313876ca281a763ca13b1f51cc0b9dfe954856c03d50cc9a6cf4"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ansi-wl-pprint-0.6.8.2-7e49236d24f8045d4c843d378067781a7b53e53e5ca5ab35b366ce9d87abff15","pkg-name":"ansi-wl-pprint","pkg-version":"0.6.8.2","flags":{"example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"08d938b6b1a61690063b12dad47f899ce3f8d8f179480948b98af8e733016701","pkg-src-sha256":"a630721bd57678c3bfeb6c703f8249e434cbf85f40daceec4660fb8c6725cb3e","depends":["ansi-terminal-0.9-02cef318fc6e2d84dc8adb1ff4af9a08994cbe46397965968fe470e14ad9ea7c","base-4.12.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.3.0","pkg-name":"array","pkg-version":"0.5.3.0","depends":["base-4.12.0.0"]},{"type":"configured","id":"assert-failure-0.1.2.2-de21f694cfb032c206fedaa9442e732d1186f4a27230fdc2bb9773274c8750bb","pkg-name":"assert-failure","pkg-version":"0.1.2.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"58d9502cb922357b0697ee4d06dabf216ce6e8959950ad8b11c6eb7a1ae579a5","pkg-src-sha256":"f69416fd527b4f6933586edfc9ee741a2163c3741471e9b8e46a244495bd4a9d","depends":["base-4.12.0.0","pretty-show-1.9.5-e7a5481be560984824f74c167902aef106a46edc2309a36adf249e501070ae76","text-1.2.3.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"async-2.2.1-a29a918450bee8d046c58a121c671da6839cfbb80b5b32f0a9ca853cbace885a","pkg-name":"async","pkg-version":"2.2.1","flags":{"bench":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"61789382f449a02f827e70a029ba8f24a223b9c6b3792bb094fbd41ee360e851","pkg-src-sha256":"8f0b86022a1319d3c1c68655790da4b7f98017982e27ec3f3dbfe01029d39027","depends":["base-4.12.0.0","hashable-1.2.7.0-1cee4bfd1838b26e163c3668c53516b65d131b9ca3b098530757e34bd545b38c","stm-2.5.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"base-4.12.0.0","pkg-name":"base","pkg-version":"4.12.0.0","depends":["ghc-prim-0.5.3","integer-gmp-1.0.2.0","rts"]},{"type":"configured","id":"base-compat-0.10.5-fee28ad71dd44827dc075d41b834ac9da6d6ecd02e891f209c43aee6f75a7bf9","pkg-name":"base-compat","pkg-version":"0.10.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d49e174ed0daecd059c52d13d4f4de87b5609c81212a22adbb92431f9cd58fff","pkg-src-sha256":"990aea21568956d44ab018c5dbfbaea014b9a0d5295d29ca7550149419a6fb41","depends":["base-4.12.0.0","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"base-orphans-0.8.1-c8f92cb2a9a044b2c6f426cef13ddbad0eb4594290b8e797c15a342964b2f918","pkg-name":"base-orphans","pkg-version":"0.8.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"defd0057b5db93257528d89b5b01a0fee9738e878c121c686948ac4aa5dded63","pkg-src-sha256":"442bd63aed102e753b2fed15df8ae19f35ee07af26590da63837c523b64a99db","depends":["base-4.12.0.0","ghc-prim-0.5.3"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bifunctors-5.5.4-c168083739f2c59329f01c3486d83ee9749de6b1b63bd1a7c962fcbb819a3a9c","pkg-name":"bifunctors","pkg-version":"5.5.4","flags":{"semigroups":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dba50443dfe364d5131363e5ad955198aa2c4be544bff66ee38fdaeb693f8766","pkg-src-sha256":"29d62cf43fcef94534a585623357ab6d89a940db8d3931cb092485c6c3b19b8c","depends":["base-4.12.0.0","base-orphans-0.8.1-c8f92cb2a9a044b2c6f426cef13ddbad0eb4594290b8e797c15a342964b2f918","comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c","containers-0.6.0.1","tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3","template-haskell-2.14.0.0","th-abstraction-0.3.1.0-76c84745d63f0f5ff7362f940ca0442b9b5318d0635b2f8c7f0f198ce4092612","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.6.0","pkg-name":"binary","pkg-version":"0.8.6.0","depends":["array-0.5.3.0","base-4.12.0.0","bytestring-0.10.8.2","containers-0.6.0.1"]},{"type":"pre-existing","id":"bytestring-0.10.8.2","pkg-name":"bytestring","pkg-version":"0.10.8.2","depends":["base-4.12.0.0","deepseq-1.4.4.0","ghc-prim-0.5.3","integer-gmp-1.0.2.0"]},{"type":"configured","id":"cabal-doctest-1.0.6-75565e17606d3555acf55adb469e1a8d91c1531e3a556686ba3b0927100a5caf","pkg-name":"cabal-doctest","pkg-version":"1.0.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c0b4a5b1ff38d2867e7003b4be59f3bd7e8e204ab8c988d96d3a77472ae671cd","pkg-src-sha256":"decaaa5a73eaabaf3c4f8c644bd7f6e3f428b6244e935c0cf105f75f9b24ed2d","depends":["Cabal-2.4.0.1","base-4.12.0.0","directory-1.3.3.0","filepath-1.4.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"colour-2.3.4-015c6cdaab31313876ca281a763ca13b1f51cc0b9dfe954856c03d50cc9a6cf4","pkg-name":"colour","pkg-version":"2.3.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"90257dac3d9149b2b384184638b610bf95d7d180e1e4d3a329e038f18c6b7859","pkg-src-sha256":"0f439f00b322ce3d551f28a4dd1520aa2c91d699de4cdc6d485b9b04be0dc5eb","depends":["base-4.12.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c","pkg-name":"comonad","pkg-version":"5.0.4","flags":{"containers":true,"contravariant":true,"distributive":true,"test-doctests":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"522ca45fedc212d86b3f628275974378e821e7f3caf8055a64189ae4f8c59dbf","pkg-src-sha256":"78a89d7f9f0975b40b3294adcb70885649572b687ac5f5dc98e452471838e825","components":{"lib":{"depends":["base-4.12.0.0","containers-0.6.0.1","contravariant-1.5-b7079f6dfdc4537b233a1b3314e4f4d98dca27fe75f30d78be223905f84ab9ec","distributive-0.6-e7019c98da9b737e65d6f0d72a7baeafa790bb0735a13abce801caa36adca32a","semigroups-0.18.5-a5016e2359a935df9e8b02facb311e2bc8cedf3bdb195e0d22431b1e8a15d06f","tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3","transformers-0.5.6.2","transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844"],"exe-depends":[]},"setup":{"depends":["Cabal-2.4.0.1","base-4.12.0.0","cabal-doctest-1.0.6-75565e17606d3555acf55adb469e1a8d91c1531e3a556686ba3b0927100a5caf"],"exe-depends":[]}}},{"type":"pre-existing","id":"containers-0.6.0.1","pkg-name":"containers","pkg-version":"0.6.0.1","depends":["array-0.5.3.0","base-4.12.0.0","deepseq-1.4.4.0","ghc-prim-0.5.3"]},{"type":"configured","id":"contravariant-1.5-b7079f6dfdc4537b233a1b3314e4f4d98dca27fe75f30d78be223905f84ab9ec","pkg-name":"contravariant","pkg-version":"1.5","flags":{"safe":false,"semigroups":true,"statevar":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"83f4d20073414561f2352aeb8f48207def31cc933eb058c141968fbbefaeb0d5","pkg-src-sha256":"6ef067b692ad69ffff294b953aa85f3ded459d4ae133c37896222a09280fc3c2","components":{"lib":{"depends":["StateVar-1.1.1.1-73e71bfbcb522789e12d81482b7d07b4b01bd2b01c482003862134cc937920c3","base-4.12.0.0","transformers-0.5.6.2"],"exe-depends":[]}}},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.3.0","base-4.12.0.0"]},{"type":"pre-existing","id":"directory-1.3.3.0","pkg-name":"directory","pkg-version":"1.3.3.0","depends":["base-4.12.0.0","filepath-1.4.2.1","time-1.8.0.2","unix-2.7.2.2"]},{"type":"configured","id":"distributive-0.6-e7019c98da9b737e65d6f0d72a7baeafa790bb0735a13abce801caa36adca32a","pkg-name":"distributive","pkg-version":"0.6","flags":{"semigroups":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"26507cf231eb10db1eb54bc358477418ce87d5077ff76c66743925fb49494b54","pkg-src-sha256":"a4af1341a63a430dc569dd1e59631f127c40ebdd353a945a74d18682f6bdc1d4","components":{"lib":{"depends":["base-4.12.0.0","base-orphans-0.8.1-c8f92cb2a9a044b2c6f426cef13ddbad0eb4594290b8e797c15a342964b2f918","tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3","transformers-0.5.6.2"],"exe-depends":[]},"setup":{"depends":["Cabal-2.4.0.1","base-4.12.0.0","cabal-doctest-1.0.6-75565e17606d3555acf55adb469e1a8d91c1531e3a556686ba3b0927100a5caf"],"exe-depends":[]}}},{"type":"configured","id":"enummapset-0.6.0.1-cbfb66ef51822a4c1d06bf9eceded8b1198483840a1662eb75fe500992859d27","pkg-name":"enummapset","pkg-version":"0.6.0.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"67faefdb4f9b550a73dd0bf7356e5df93b3c4314687e2c5d2c9adf6936b0c266","pkg-src-sha256":"f8b8defb03621ab36a450dbae559eff0afa4ef103bc05a288f97cceecaba925a","depends":["base-4.12.0.0","containers-0.6.0.1","deepseq-1.4.4.0","semigroups-0.18.5-a5016e2359a935df9e8b02facb311e2bc8cedf3bdb195e0d22431b1e8a15d06f"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"exceptions-0.10.1-ae56595f2c22f63cdfbfb627a437ce4b7c79d5be0fd85ed52b3f9f684b944e35","pkg-name":"exceptions","pkg-version":"0.10.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ad1f567cb78ce5eca7697372ea4befc795fd98d0fd23e30b84e1a4b0effca2e","pkg-src-sha256":"3ba4032df6b115bab1dad294948cf43fb9e1f566d3c513e9e1c363131739df9d","depends":["base-4.12.0.0","mtl-2.2.2","stm-2.5.0.0","template-haskell-2.14.0.0","transformers-0.5.6.2","transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.12.0.0"]},{"type":"configured","id":"free-5.1-4d674cd8e409881401738f00e22e96d1f445ca197efa5773b9d3d9e905e1da70","pkg-name":"free","pkg-version":"5.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"71aa48c5a5dde71ed2a7f3d1d23c6d3a66580859444f55c8b38dd1bb205aa298","pkg-src-sha256":"70424d5c82dea36a0a29c4f5f6bc047597a947ad46f3d66312e47bbee2eeea84","depends":["base-4.12.0.0","comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c","containers-0.6.0.1","distributive-0.6-e7019c98da9b737e65d6f0d72a7baeafa790bb0735a13abce801caa36adca32a","exceptions-0.10.1-ae56595f2c22f63cdfbfb627a437ce4b7c79d5be0fd85ed52b3f9f684b944e35","mtl-2.2.2","profunctors-5.3-2d985a7bbfaa3cf4fdde9d5092dabc06abb1a6041ef756fd8e21b942c6d63e7e","semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c","template-haskell-2.14.0.0","transformers-0.5.6.2","transformers-base-0.4.5.2-63cb7893a28d83ca9fe2120916b908e927ef73641addfb0c2dd3262d0122f038"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-boot-th-8.6.4","pkg-name":"ghc-boot-th","pkg-version":"8.6.4","depends":["base-4.12.0.0"]},{"type":"pre-existing","id":"ghc-compact-0.1.0.0","pkg-name":"ghc-compact","pkg-version":"0.1.0.0","depends":["base-4.12.0.0","bytestring-0.10.8.2","ghc-prim-0.5.3"]},{"type":"pre-existing","id":"ghc-prim-0.5.3","pkg-name":"ghc-prim","pkg-version":"0.5.3","depends":["rts"]},{"type":"configured","id":"happy-1.19.9-747e409d1a086accbaa15fe08c2a7e6af513fb52a391f03d7fa81caa3bd2f60c","pkg-name":"happy","pkg-version":"1.19.9","flags":{"small_base":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f8c774230735a390c287b2980cfcd2703d24d8dde85a01ea721b7b4b4c82944f","pkg-src-sha256":"3e81a3e813acca3aae52721c412cde18b7b7c71ecbacfaeaa5c2f4b35abf1d8d","components":{"exe:happy":{"depends":["array-0.5.3.0","base-4.12.0.0","containers-0.6.0.1","mtl-2.2.2"],"exe-depends":[],"bin-file":"/home/mikolaj/.cabal/store/ghc-8.6.4/happy-1.19.9-747e409d1a086accbaa15fe08c2a7e6af513fb52a391f03d7fa81caa3bd2f60c/bin/happy"},"setup":{"depends":["Cabal-2.4.0.1","base-4.12.0.0","directory-1.3.3.0","filepath-1.4.2.1"],"exe-depends":[]}}},{"type":"configured","id":"hashable-1.2.7.0-1cee4bfd1838b26e163c3668c53516b65d131b9ca3b098530757e34bd545b38c","pkg-name":"hashable","pkg-version":"1.2.7.0","flags":{"examples":false,"integer-gmp":true,"sse2":true,"sse41":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"03b6836ca9cd3ad0e5a2f3cce989b001dd0e05f306a873db3196037adb30e0a4","pkg-src-sha256":"ecb5efc0586023f5a0dc861100621c1dbb4cbb2f0516829a16ebac39f0432abf","depends":["base-4.12.0.0","bytestring-0.10.8.2","deepseq-1.4.4.0","ghc-prim-0.5.3","integer-gmp-1.0.2.0","text-1.2.3.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"haskell-lexer-1.0.2-ecac81fac6b5511bac6e7e74881616d67cb82597f5d05b60c15661b81b90d30b","pkg-name":"haskell-lexer","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1c84537dbd29809c1004ccb156552429de35fe77fab6dd484ac8deb318cc6b64","pkg-src-sha256":"d8cdf3122ee384ec440269108fd85ccf207a413015ceeffb2e9bf4313a6addf3","components":{"lib":{"depends":["base-4.12.0.0"],"exe-depends":[]}}},{"type":"configured","id":"hsini-0.5.1.2-2ae2483135a10ab5c1a5385681b898db46bbf5a7cbec0c280679b9ddabab4840","pkg-name":"hsini","pkg-version":"0.5.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e6e290ad8d26a8632e64c0887003897674beeeb0da68c429279418fda4547b72","pkg-src-sha256":"eaa6ae68c6271d5c3187054e702719b3ee7916524ffda27bb328cc9aad9ed8e4","depends":["base-4.12.0.0","bytestring-0.10.8.2","containers-0.6.0.1","mtl-2.2.2","parsec-3.1.13.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"integer-gmp-1.0.2.0","pkg-name":"integer-gmp","pkg-version":"1.0.2.0","depends":["ghc-prim-0.5.3"]},{"type":"configured","id":"keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e","pkg-name":"keys","pkg-version":"3.12.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c6f046c5b035017438157323977e1121eb094e548a56e8ab32236192674b3e95","pkg-src-sha256":"7fcea48187df82c02c159dea07a581cddf371023e6a3c34de7fa69a8ef2315fb","depends":["array-0.5.3.0","base-4.12.0.0","comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c","containers-0.6.0.1","free-5.1-4d674cd8e409881401738f00e22e96d1f445ca197efa5773b9d3d9e905e1da70","hashable-1.2.7.0-1cee4bfd1838b26e163c3668c53516b65d131b9ca3b098530757e34bd545b38c","semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c","semigroups-0.18.5-a5016e2359a935df9e8b02facb311e2bc8cedf3bdb195e0d22431b1e8a15d06f","tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3","transformers-0.5.6.2","transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844","unordered-containers-0.2.10.0-90bca1e4730e255542829df4d22abd8adf214a406e12cfbbe249329a1125ed8a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"minimorph-0.2.1.0-f751f0f71e9ab5be6437ceea48ca8259b514300b2cd5fe58317026eb93abee5d","pkg-name":"minimorph","pkg-version":"0.2.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"88a6a0c39506b5db2295da8ac86bb55a63946bee8d6c391e6d7ef981acbaae65","pkg-src-sha256":"127eb21b889ca9411bee0612ac8aebac7992b9f790dc94b83e28312441d317de","depends":["base-4.12.0.0","text-1.2.3.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"miniutter-0.5.0.0-726355ba622057bc102c23edb53a65a861e6e8a97442a4caf1fbe37d1659e74b","pkg-name":"miniutter","pkg-version":"0.5.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"696e21da5b903ca3e0c990e0a3da4caf87d1ca4f9b9de51e469f560ad11ff69e","pkg-src-sha256":"ee30db437e6f7012b8862061c842dfaae7e52ea46832fd743e891ca04999fa41","depends":["base-4.12.0.0","binary-0.8.6.0","containers-0.6.0.1","minimorph-0.2.1.0-f751f0f71e9ab5be6437ceea48ca8259b514300b2cd5fe58317026eb93abee5d","text-1.2.3.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.12.0.0","transformers-0.5.6.2"]},{"type":"configured","id":"optparse-applicative-0.14.3.0-cc35318103c80637869ae03e6b1fa1338334d8b503c5315d3d4b653e94ce626d","pkg-name":"optparse-applicative","pkg-version":"0.14.3.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b6b56a922d10911a2824b965750ddc7794de746e347afe67f1a84d05168368dc","pkg-src-sha256":"72476302fe555a508917b2d7d6121c7b58ea5434cdc08aeb5d4b652e8f0e7663","depends":["ansi-wl-pprint-0.6.8.2-7e49236d24f8045d4c843d378067781a7b53e53e5ca5ab35b366ce9d87abff15","base-4.12.0.0","process-1.6.5.0","transformers-0.5.6.2","transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"parsec-3.1.13.0","pkg-name":"parsec","pkg-version":"3.1.13.0","depends":["base-4.12.0.0","bytestring-0.10.8.2","mtl-2.2.2","text-1.2.3.1"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.12.0.0","deepseq-1.4.4.0","ghc-prim-0.5.3"]},{"type":"configured","id":"pretty-show-1.9.5-739573b049ae90359a2e4ebe170b4215506d084387f9d79f02c11d461a902513","pkg-name":"pretty-show","pkg-version":"1.9.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"92aa3f43d8459a9b543e102fbb0b7a6aae0074e18ca6a9970d9922a867114f53","pkg-src-sha256":"b095bebb79951d2e25a543a591844fb638165672d7b95d325844611297ba423f","depends":["base-4.12.0.0","pretty-show-1.9.5-e7a5481be560984824f74c167902aef106a46edc2309a36adf249e501070ae76"],"exe-depends":[],"component-name":"exe:ppsh","bin-file":"/home/mikolaj/.cabal/store/ghc-8.6.4/pretty-show-1.9.5-739573b049ae90359a2e4ebe170b4215506d084387f9d79f02c11d461a902513/bin/ppsh"},{"type":"configured","id":"pretty-show-1.9.5-e7a5481be560984824f74c167902aef106a46edc2309a36adf249e501070ae76","pkg-name":"pretty-show","pkg-version":"1.9.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"92aa3f43d8459a9b543e102fbb0b7a6aae0074e18ca6a9970d9922a867114f53","pkg-src-sha256":"b095bebb79951d2e25a543a591844fb638165672d7b95d325844611297ba423f","depends":["array-0.5.3.0","base-4.12.0.0","filepath-1.4.2.1","ghc-prim-0.5.3","haskell-lexer-1.0.2-ecac81fac6b5511bac6e7e74881616d67cb82597f5d05b60c15661b81b90d30b","pretty-1.1.3.6","text-1.2.3.1"],"exe-depends":["happy-1.19.9-747e409d1a086accbaa15fe08c2a7e6af513fb52a391f03d7fa81caa3bd2f60c"],"component-name":"lib"},{"type":"configured","id":"primitive-0.6.4.0-e60c0400f5d0d0400adbdd3b58d2ae4bf01a12cc9b441a8fd7e2e2b1b623cdc4","pkg-name":"primitive","pkg-version":"0.6.4.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5b6a2c3cc70a35aabd4565fcb9bb1dd78fe2814a36e62428a9a1aae8c32441a1","pkg-src-sha256":"4cbeaf7924dd79221f327ea101a29bf35c4976dc3319df157ff46ea68e6a0c64","depends":["base-4.12.0.0","ghc-prim-0.5.3","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.5.0","pkg-name":"process","pkg-version":"1.6.5.0","depends":["base-4.12.0.0","deepseq-1.4.4.0","directory-1.3.3.0","filepath-1.4.2.1","unix-2.7.2.2"]},{"type":"configured","id":"profunctors-5.3-2d985a7bbfaa3cf4fdde9d5092dabc06abb1a6041ef756fd8e21b942c6d63e7e","pkg-name":"profunctors","pkg-version":"5.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ce641b72fd014b1f7b42a438f8c0360cb93fd277c7b843b7ef94a7c083c31ded","pkg-src-sha256":"74632acc5bb76e04ade95e187be432b607da0e863c0e08f3cabafb23d8b4a3b7","depends":["base-4.12.0.0","base-orphans-0.8.1-c8f92cb2a9a044b2c6f426cef13ddbad0eb4594290b8e797c15a342964b2f918","bifunctors-5.5.4-c168083739f2c59329f01c3486d83ee9749de6b1b63bd1a7c962fcbb819a3a9c","comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c","contravariant-1.5-b7079f6dfdc4537b233a1b3314e4f4d98dca27fe75f30d78be223905f84ab9ec","distributive-0.6-e7019c98da9b737e65d6f0d72a7baeafa790bb0735a13abce801caa36adca32a","semigroups-0.18.5-a5016e2359a935df9e8b02facb311e2bc8cedf3bdb195e0d22431b1e8a15d06f","tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"random-1.1-b83f3cc2d1fbfe2c01fc9b01fe0bb59963f3fc47d7c811bd6540506a70d12ffb","pkg-name":"random","pkg-version":"1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7b67624fd76ddf97c206de0801dc7e888097e9d572974be9b9ea6551d76965df","pkg-src-sha256":"b718a41057e25a3a71df693ab0fe2263d492e759679b3c2fea6ea33b171d3a5a","depends":["base-4.12.0.0","time-1.8.0.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0","depends":[]},{"type":"configured","id":"sdl2-2.4.1.0-515ac05e7e03749e7d297e83741eba2961eee5070d1e5bcc1e6108d02ccd756f","pkg-name":"sdl2","pkg-version":"2.4.1.0","flags":{"examples":false,"no-linear":true,"opengl-example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"65a2d222044676686859fda43f119cb0f02ab5d04718ee3a7331628dade69931","pkg-src-sha256":"21a569c0c19f8ff2bbe1cf1d3eb32f65e8143806de353cedd240df5e9d088b5c","depends":["StateVar-1.1.1.1-73e71bfbcb522789e12d81482b7d07b4b01bd2b01c482003862134cc937920c3","base-4.12.0.0","bytestring-0.10.8.2","exceptions-0.10.1-ae56595f2c22f63cdfbfb627a437ce4b7c79d5be0fd85ed52b3f9f684b944e35","text-1.2.3.1","transformers-0.5.6.2","vector-0.12.0.2-faf07d1a6670dd58ab9d04d621cf978482c959a6c8bfeffb081d99d95bbe0610"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"sdl2-ttf-2.1.0-8bd646c43c5de18e9ebcf9eb429cafa9b1adda94b5e0e94fbfeaefbb6337458b","pkg-name":"sdl2-ttf","pkg-version":"2.1.0","flags":{"example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9ec4efa113010857dd9608a8afcd6f07812de243591b700705a2b8d154052cfa","pkg-src-sha256":"c7656fe923e618d3919d47ac753451b08e6d709372380e15bd3d75b39f2c80f7","depends":["base-4.12.0.0","bytestring-0.10.8.2","sdl2-2.4.1.0-515ac05e7e03749e7d297e83741eba2961eee5070d1e5bcc1e6108d02ccd756f","template-haskell-2.14.0.0","text-1.2.3.1","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c","pkg-name":"semigroupoids","pkg-version":"5.3.2","flags":{"comonad":true,"containers":true,"contravariant":true,"distributive":true,"doctests":true,"tagged":true,"unordered-containers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7a00aa24d8129b153f19991b96341e6f725ba77cef46b151c84d6dac1d12b47e","pkg-src-sha256":"61a8213df437ee96a20b1c6dec8b5c573e4e0f338eb2061739a67f471d6b9d05","components":{"lib":{"depends":["base-4.12.0.0","base-orphans-0.8.1-c8f92cb2a9a044b2c6f426cef13ddbad0eb4594290b8e797c15a342964b2f918","bifunctors-5.5.4-c168083739f2c59329f01c3486d83ee9749de6b1b63bd1a7c962fcbb819a3a9c","comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c","containers-0.6.0.1","contravariant-1.5-b7079f6dfdc4537b233a1b3314e4f4d98dca27fe75f30d78be223905f84ab9ec","distributive-0.6-e7019c98da9b737e65d6f0d72a7baeafa790bb0735a13abce801caa36adca32a","hashable-1.2.7.0-1cee4bfd1838b26e163c3668c53516b65d131b9ca3b098530757e34bd545b38c","tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3","template-haskell-2.14.0.0","transformers-0.5.6.2","transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844","unordered-containers-0.2.10.0-90bca1e4730e255542829df4d22abd8adf214a406e12cfbbe249329a1125ed8a"],"exe-depends":[]},"setup":{"depends":["Cabal-2.4.0.1","base-4.12.0.0","cabal-doctest-1.0.6-75565e17606d3555acf55adb469e1a8d91c1531e3a556686ba3b0927100a5caf"],"exe-depends":[]}}},{"type":"configured","id":"semigroups-0.18.5-a5016e2359a935df9e8b02facb311e2bc8cedf3bdb195e0d22431b1e8a15d06f","pkg-name":"semigroups","pkg-version":"0.18.5","flags":{"binary":true,"bytestring":true,"bytestring-builder":false,"containers":true,"deepseq":true,"hashable":true,"tagged":true,"text":true,"transformers":true,"unordered-containers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"aaf0d3d5050aa120b2eb98682bc7f8aeed947c1eb51a80375f32775af3d2ff68","pkg-src-sha256":"ab2a96af6e81e31b909c37ba65f436f1493dbf387cfe0de10b6586270c4ce29d","depends":["base-4.12.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.0.0","pkg-name":"stm","pkg-version":"2.5.0.0","depends":["array-0.5.3.0","base-4.12.0.0"]},{"type":"configured","id":"tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3","pkg-name":"tagged","pkg-version":"0.8.6","flags":{"deepseq":true,"transformers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7093ee39c9779beeacffa4b0035a0e8a25da16afcd1c1a876930207fb8e31d1c","pkg-src-sha256":"ad16def0884cf6f05ae1ae8e90192cf9d8d9673fa264b249499bd9e4fac791dd","depends":["base-4.12.0.0","deepseq-1.4.4.0","template-haskell-2.14.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.14.0.0","pkg-name":"template-haskell","pkg-version":"2.14.0.0","depends":["base-4.12.0.0","ghc-boot-th-8.6.4","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.3.1","pkg-name":"text","pkg-version":"1.2.3.1","depends":["array-0.5.3.0","base-4.12.0.0","binary-0.8.6.0","bytestring-0.10.8.2","deepseq-1.4.4.0","ghc-prim-0.5.3","integer-gmp-1.0.2.0"]},{"type":"configured","id":"th-abstraction-0.3.1.0-76c84745d63f0f5ff7362f940ca0442b9b5318d0635b2f8c7f0f198ce4092612","pkg-name":"th-abstraction","pkg-version":"0.3.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"96042f6658f2dccfac03b33f0fd59f62b1f65b9b0a765d8a2ea6026f4081ee4a","pkg-src-sha256":"4b9e1bcc6ec3d897fb09c3d7fa2f37f0672d5370e0e3e49809886da81fe001b9","depends":["base-4.12.0.0","containers-0.6.0.1","ghc-prim-0.5.3","template-haskell-2.14.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"time-1.8.0.2","pkg-name":"time","pkg-version":"1.8.0.2","depends":["base-4.12.0.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.12.0.0"]},{"type":"configured","id":"transformers-base-0.4.5.2-63cb7893a28d83ca9fe2120916b908e927ef73641addfb0c2dd3262d0122f038","pkg-name":"transformers-base","pkg-version":"0.4.5.2","flags":{"orphaninstances":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e4d8155470905ba2942033a1537fc4cf91927d1c9b34693fd57ddf3bc02334af","pkg-src-sha256":"d0c80c63fdce6a077dd8eda4f1ff289b85578703a3f1272e141d400fe23245e8","depends":["base-4.12.0.0","base-orphans-0.8.1-c8f92cb2a9a044b2c6f426cef13ddbad0eb4594290b8e797c15a342964b2f918","stm-2.5.0.0","transformers-0.5.6.2","transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844","pkg-name":"transformers-compat","pkg-version":"0.6.4","flags":{"five":false,"five-three":true,"four":false,"generic-deriving":true,"mtl":true,"three":false,"two":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d298cd9d1bb7b05160229e244436bae825b53660865e3d5fd695ea0fafec1e6f","pkg-src-sha256":"ad7fb455d636533ba37fcae7b01666ebca07f668f3bd773d754b76f82d3ece0c","depends":["base-4.12.0.0","ghc-prim-0.5.3","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.12.0.0","bytestring-0.10.8.2","time-1.8.0.2"]},{"type":"configured","id":"unordered-containers-0.2.10.0-90bca1e4730e255542829df4d22abd8adf214a406e12cfbbe249329a1125ed8a","pkg-name":"unordered-containers","pkg-version":"0.2.10.0","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"97cbf75a606c5e4f499828cb11aa8410c5f3a0034b4ef088cf2fad8ca986af33","pkg-src-sha256":"65f117bdbdea9efc75fb9fd539873de7687e005d8898bb21821020a4b383c573","depends":["base-4.12.0.0","deepseq-1.4.4.0","hashable-1.2.7.0-1cee4bfd1838b26e163c3668c53516b65d131b9ca3b098530757e34bd545b38c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-0.12.0.2-faf07d1a6670dd58ab9d04d621cf978482c959a6c8bfeffb081d99d95bbe0610","pkg-name":"vector","pkg-version":"0.12.0.2","flags":{"boundschecks":true,"internalchecks":false,"unsafechecks":false,"wall":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6a898f00b9850fb84836f187324fac1e64c998fb4eac290d4aa91b50a4c586f5","pkg-src-sha256":"52e89dacaff10bedb8653181963cae928f9674a099bb706713dae83994bbc0f3","depends":["base-4.12.0.0","deepseq-1.4.4.0","ghc-prim-0.5.3","primitive-0.6.4.0-e60c0400f5d0d0400adbdd3b58d2ae4bf01a12cc9b441a8fd7e2e2b1b623cdc4"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-binary-instances-0.2.5.1-845df65ae676a80e5571a2ca8826a981f3dcb50a65776051d2d357a08ef3937a","pkg-name":"vector-binary-instances","pkg-version":"0.2.5.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7f4d2c9f05252a5cda556a6cb1af233b268928715cc79dc49d8e0c2d0a9954fa","pkg-src-sha256":"3945b99f8efd319c837700b7cef5163ee23e656e89227357e0b7a41d2a66c512","depends":["base-4.12.0.0","binary-0.8.6.0","vector-0.12.0.2-faf07d1a6670dd58ab9d04d621cf978482c959a6c8bfeffb081d99d95bbe0610"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"zlib-0.6.2-1df97b1652f6747a2a2e0831c8a3fe269d7654697302b1c8c63453af10f68d77","pkg-name":"zlib","pkg-version":"0.6.2","flags":{"non-blocking-ffi":false,"pkg-config":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c11e24ac1df02ad71b861ba3f251b1ea8e64fa44632ba73944dd71767205bcad","pkg-src-sha256":"0dcc7d925769bdbeb323f83b66884101084167501f11d74d21eb9bc515707fed","depends":["base-4.12.0.0","bytestring-0.10.8.2"],"exe-depends":[],"component-name":"lib"}]}

The ending of the log:

Building library for keys-3.12.1..
[1 of 1] Compiling Data.Key         ( src/Data/Key.hs, dist/build/Data/Key.o )
[1 of 1] Compiling Data.Key         ( src/Data/Key.hs, dist/build/Data/Key.p_o )
Installing library in /home/mikolaj/.cabal/store/ghc-8.6.4/incoming/new-18249/home/mikolaj/.cabal/store/ghc-8.6.4/keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e/lib
Configuring library 'definition' for LambdaHack-0.9.2.0..
Preprocessing library 'definition' for LambdaHack-0.9.2.0..
Building library 'definition' for LambdaHack-0.9.2.0..
[ 1 of 15] Compiling Game.LambdaHack.Core.Prelude ( definition-src/Game/LambdaHack/Core/Prelude.hs, dist/build/definition/Game/LambdaHack/Core/Prelude.o )
[ 2 of 15] Compiling Game.LambdaHack.Core.Frequency ( definition-src/Game/LambdaHack/Core/Frequency.hs, dist/build/definition/Game/LambdaHack/Core/Frequency.o )
[ 3 of 15] Compiling Game.LambdaHack.Core.Dice ( definition-src/Game/LambdaHack/Core/Dice.hs, dist/build/definition/Game/LambdaHack/Core/Dice.o )
[ 4 of 15] Compiling Game.LambdaHack.Core.Random ( definition-src/Game/LambdaHack/Core/Random.hs, dist/build/definition/Game/LambdaHack/Core/Random.o )
[ 5 of 15] Compiling Game.LambdaHack.Definition.Ability ( definition-src/Game/LambdaHack/Definition/Ability.hs, dist/build/definition/Game/LambdaHack/Definition/Ability.o )
[ 6 of 15] Compiling Game.LambdaHack.Definition.Color ( definition-src/Game/LambdaHack/Definition/Color.hs, dist/build/definition/Game/LambdaHack/Definition/Color.o )
[ 7 of 15] Compiling Game.LambdaHack.Definition.Defs ( definition-src/Game/LambdaHack/Definition/Defs.hs, dist/build/definition/Game/LambdaHack/Definition/Defs.o )
[ 8 of 15] Compiling Game.LambdaHack.Definition.ContentData ( definition-src/Game/LambdaHack/Definition/ContentData.hs, dist/build/definition/Game/LambdaHack/Definition/ContentData.o )
[ 9 of 15] Compiling Game.LambdaHack.Content.RuleKind ( definition-src/Game/LambdaHack/Content/RuleKind.hs, dist/build/definition/Game/LambdaHack/Content/RuleKind.o )
[10 of 15] Compiling Game.LambdaHack.Definition.Flavour ( definition-src/Game/LambdaHack/Definition/Flavour.hs, dist/build/definition/Game/LambdaHack/Definition/Flavour.o )
[11 of 15] Compiling Game.LambdaHack.Content.ItemKind ( definition-src/Game/LambdaHack/Content/ItemKind.hs, dist/build/definition/Game/LambdaHack/Content/ItemKind.o )
[12 of 15] Compiling Game.LambdaHack.Content.TileKind ( definition-src/Game/LambdaHack/Content/TileKind.hs, dist/build/definition/Game/LambdaHack/Content/TileKind.o )
[13 of 15] Compiling Game.LambdaHack.Content.PlaceKind ( definition-src/Game/LambdaHack/Content/PlaceKind.hs, dist/build/definition/Game/LambdaHack/Content/PlaceKind.o )
[14 of 15] Compiling Game.LambdaHack.Content.CaveKind ( definition-src/Game/LambdaHack/Content/CaveKind.hs, dist/build/definition/Game/LambdaHack/Content/CaveKind.o )
[15 of 15] Compiling Game.LambdaHack.Content.ModeKind ( definition-src/Game/LambdaHack/Content/ModeKind.hs, dist/build/definition/Game/LambdaHack/Content/ModeKind.o )
[ 1 of 15] Compiling Game.LambdaHack.Core.Prelude ( definition-src/Game/LambdaHack/Core/Prelude.hs, dist/build/definition/Game/LambdaHack/Core/Prelude.p_o )
[ 2 of 15] Compiling Game.LambdaHack.Core.Frequency ( definition-src/Game/LambdaHack/Core/Frequency.hs, dist/build/definition/Game/LambdaHack/Core/Frequency.p_o )
[ 3 of 15] Compiling Game.LambdaHack.Core.Dice ( definition-src/Game/LambdaHack/Core/Dice.hs, dist/build/definition/Game/LambdaHack/Core/Dice.p_o )
[ 4 of 15] Compiling Game.LambdaHack.Core.Random ( definition-src/Game/LambdaHack/Core/Random.hs, dist/build/definition/Game/LambdaHack/Core/Random.p_o )
[ 5 of 15] Compiling Game.LambdaHack.Definition.Ability ( definition-src/Game/LambdaHack/Definition/Ability.hs, dist/build/definition/Game/LambdaHack/Definition/Ability.p_o )
[ 6 of 15] Compiling Game.LambdaHack.Definition.Color ( definition-src/Game/LambdaHack/Definition/Color.hs, dist/build/definition/Game/LambdaHack/Definition/Color.p_o )
[ 7 of 15] Compiling Game.LambdaHack.Definition.Defs ( definition-src/Game/LambdaHack/Definition/Defs.hs, dist/build/definition/Game/LambdaHack/Definition/Defs.p_o )
[ 8 of 15] Compiling Game.LambdaHack.Definition.ContentData ( definition-src/Game/LambdaHack/Definition/ContentData.hs, dist/build/definition/Game/LambdaHack/Definition/ContentData.p_o )
[ 9 of 15] Compiling Game.LambdaHack.Content.RuleKind ( definition-src/Game/LambdaHack/Content/RuleKind.hs, dist/build/definition/Game/LambdaHack/Content/RuleKind.p_o )
[10 of 15] Compiling Game.LambdaHack.Definition.Flavour ( definition-src/Game/LambdaHack/Definition/Flavour.hs, dist/build/definition/Game/LambdaHack/Definition/Flavour.p_o )
[11 of 15] Compiling Game.LambdaHack.Content.ItemKind ( definition-src/Game/LambdaHack/Content/ItemKind.hs, dist/build/definition/Game/LambdaHack/Content/ItemKind.p_o )
[12 of 15] Compiling Game.LambdaHack.Content.TileKind ( definition-src/Game/LambdaHack/Content/TileKind.hs, dist/build/definition/Game/LambdaHack/Content/TileKind.p_o )
[13 of 15] Compiling Game.LambdaHack.Content.PlaceKind ( definition-src/Game/LambdaHack/Content/PlaceKind.hs, dist/build/definition/Game/LambdaHack/Content/PlaceKind.p_o )
[14 of 15] Compiling Game.LambdaHack.Content.CaveKind ( definition-src/Game/LambdaHack/Content/CaveKind.hs, dist/build/definition/Game/LambdaHack/Content/CaveKind.p_o )
[15 of 15] Compiling Game.LambdaHack.Content.ModeKind ( definition-src/Game/LambdaHack/Content/ModeKind.hs, dist/build/definition/Game/LambdaHack/Content/ModeKind.p_o )
Installing internal library definition in /home/mikolaj/.cabal/store/ghc-8.6.4/incoming/new-18249/home/mikolaj/.cabal/store/ghc-8.6.4/LambdaHack-0.9.2.0-63bba7027ad40834c48df85b49e36d35f77ed5b82a023d46377b2ca17db8c5f7/lib
Configuring library for LambdaHack-0.9.2.0..
Warning: The package has an extraneous version range for a dependency on an
internal library: LambdaHack -any && ==0.9.2.0, LambdaHack -any && ==0.9.2.0,
LambdaHack -any && ==0.9.2.0. This version range includes the current package
but isn't needed as the current package's library will always be used.
Warning:
    This package indirectly depends on multiple versions of the same package. This is very likely to cause a compile failure.
      package sdl2 (sdl2-2.4.1.0-515ac05e7e03749e7d297e83741eba2961eee5070d1e5bcc1e6108d02ccd756f) requires StateVar-1.1.1.1-73e71bfbcb522789e12d81482b7d07b4b01bd2b01c482003862134cc937920c3
      package contravariant (contravariant-1.5-b7079f6dfdc4537b233a1b3314e4f4d98dca27fe75f30d78be223905f84ab9ec) requires StateVar-1.1.1.1-73e71bfbcb522789e12d81482b7d07b4b01bd2b01c482003862134cc937920c3
      package contravariant (contravariant-1.5-74e4542f1e0a938a520203b56a73dda18161b00f81df5e58d4b76b6b0935016f) requires StateVar-1.1.1.1-7c16e30fc4827b80d7ad6d79ff2f471d7732f8fac5b121fae86fdba873e6f49c
      package LambdaHack (LambdaHack-0.9.2.0-25b8d9db7fe9a2c49db757f8fc8e3e6d2fc902e4adc22ca8740dd56a73f2a9f9) requires assert-failure-0.1.2.2-1d4875ae5dfc9005ae5cc573b7f3259bb884edb1232388c7f6349bce5deaef98
      package LambdaHack (LambdaHack-0.9.2.0) requires assert-failure-0.1.2.2-de21f694cfb032c206fedaa9442e732d1186f4a27230fdc2bb9773274c8750bb
      package LambdaHack (LambdaHack-0.9.2.0-25b8d9db7fe9a2c49db757f8fc8e3e6d2fc902e4adc22ca8740dd56a73f2a9f9) requires base-compat-0.10.5-b16cc06fec58ceb5fced2b5eb7f125b200fcc2f943459d2561c7d21d0dbed899
      package LambdaHack (LambdaHack-0.9.2.0) requires base-compat-0.10.5-fee28ad71dd44827dc075d41b834ac9da6d6ecd02e891f209c43aee6f75a7bf9
      package transformers-base (transformers-base-0.4.5.2-63cb7893a28d83ca9fe2120916b908e927ef73641addfb0c2dd3262d0122f038) requires base-orphans-0.8.1-c8f92cb2a9a044b2c6f426cef13ddbad0eb4594290b8e797c15a342964b2f918
      package semigroupoids (semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c) requires base-orphans-0.8.1-c8f92cb2a9a044b2c6f426cef13ddbad0eb4594290b8e797c15a342964b2f918
      package profunctors (profunctors-5.3-2d985a7bbfaa3cf4fdde9d5092dabc06abb1a6041ef756fd8e21b942c6d63e7e) requires base-orphans-0.8.1-c8f92cb2a9a044b2c6f426cef13ddbad0eb4594290b8e797c15a342964b2f918
      package distributive (distributive-0.6-e7019c98da9b737e65d6f0d72a7baeafa790bb0735a13abce801caa36adca32a) requires base-orphans-0.8.1-c8f92cb2a9a044b2c6f426cef13ddbad0eb4594290b8e797c15a342964b2f918
      package bifunctors (bifunctors-5.5.4-c168083739f2c59329f01c3486d83ee9749de6b1b63bd1a7c962fcbb819a3a9c) requires base-orphans-0.8.1-c8f92cb2a9a044b2c6f426cef13ddbad0eb4594290b8e797c15a342964b2f918
      package transformers-base (transformers-base-0.4.5.2-51e6db84f7015535335500226da6b044d7ab406bf7a13a2c98ebfd40ccd20706) requires base-orphans-0.8.1-d1d5c2f906d8b31189d967f92e3dab8d190a4551016acb01a8f15fe2cc62b631
      package semigroupoids (semigroupoids-5.3.2-0fd6a99add629115bf5463cace858fab916f076d6253afaea2525009e0d5e360) requires base-orphans-0.8.1-d1d5c2f906d8b31189d967f92e3dab8d190a4551016acb01a8f15fe2cc62b631
      package profunctors (profunctors-5.3-a558598512ec4cae69d5dffed06cad314d78a309bf726671ee71fd9da1cd9a49) requires base-orphans-0.8.1-d1d5c2f906d8b31189d967f92e3dab8d190a4551016acb01a8f15fe2cc62b631
      package distributive (distributive-0.6-24c63b7f913c0e8289752ff6dce683c25c57f12a2fcb15081b005d323f949cb8) requires base-orphans-0.8.1-d1d5c2f906d8b31189d967f92e3dab8d190a4551016acb01a8f15fe2cc62b631
      package bifunctors (bifunctors-5.5.4-75a4ac2e9f0908e67a77de1bd626c087534665a6aa1c1b92373bc8d8c724fa94) requires base-orphans-0.8.1-d1d5c2f906d8b31189d967f92e3dab8d190a4551016acb01a8f15fe2cc62b631
      package semigroupoids (semigroupoids-5.3.2-0fd6a99add629115bf5463cace858fab916f076d6253afaea2525009e0d5e360) requires bifunctors-5.5.4-75a4ac2e9f0908e67a77de1bd626c087534665a6aa1c1b92373bc8d8c724fa94
      package profunctors (profunctors-5.3-a558598512ec4cae69d5dffed06cad314d78a309bf726671ee71fd9da1cd9a49) requires bifunctors-5.5.4-75a4ac2e9f0908e67a77de1bd626c087534665a6aa1c1b92373bc8d8c724fa94
      package semigroupoids (semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c) requires bifunctors-5.5.4-c168083739f2c59329f01c3486d83ee9749de6b1b63bd1a7c962fcbb819a3a9c
      package profunctors (profunctors-5.3-2d985a7bbfaa3cf4fdde9d5092dabc06abb1a6041ef756fd8e21b942c6d63e7e) requires bifunctors-5.5.4-c168083739f2c59329f01c3486d83ee9749de6b1b63bd1a7c962fcbb819a3a9c
      package semigroupoids (semigroupoids-5.3.2-0fd6a99add629115bf5463cace858fab916f076d6253afaea2525009e0d5e360) requires comonad-5.0.4-97aafe1ba2e521f866853f44d063ae3642a6378d5bdf1c051da2a40ea43a0dff
      package profunctors (profunctors-5.3-a558598512ec4cae69d5dffed06cad314d78a309bf726671ee71fd9da1cd9a49) requires comonad-5.0.4-97aafe1ba2e521f866853f44d063ae3642a6378d5bdf1c051da2a40ea43a0dff
      package keys (keys-3.12.1-60c7303f4156386d1cd7ef27bcd618d7f12333214a0057002c23587ca7bdee44) requires comonad-5.0.4-97aafe1ba2e521f866853f44d063ae3642a6378d5bdf1c051da2a40ea43a0dff
      package free (free-5.1-67a10ee4af3bf0c3507c9c2bfb2df0a9588692ff21e0198f4fc330f2bf2e4967) requires comonad-5.0.4-97aafe1ba2e521f866853f44d063ae3642a6378d5bdf1c051da2a40ea43a0dff
      package bifunctors (bifunctors-5.5.4-75a4ac2e9f0908e67a77de1bd626c087534665a6aa1c1b92373bc8d8c724fa94) requires comonad-5.0.4-97aafe1ba2e521f866853f44d063ae3642a6378d5bdf1c051da2a40ea43a0dff
      package semigroupoids (semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c) requires comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c
      package profunctors (profunctors-5.3-2d985a7bbfaa3cf4fdde9d5092dabc06abb1a6041ef756fd8e21b942c6d63e7e) requires comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c
      package keys (keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e) requires comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c
      package free (free-5.1-4d674cd8e409881401738f00e22e96d1f445ca197efa5773b9d3d9e905e1da70) requires comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c
      package bifunctors (bifunctors-5.5.4-c168083739f2c59329f01c3486d83ee9749de6b1b63bd1a7c962fcbb819a3a9c) requires comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c
      package semigroupoids (semigroupoids-5.3.2-0fd6a99add629115bf5463cace858fab916f076d6253afaea2525009e0d5e360) requires contravariant-1.5-74e4542f1e0a938a520203b56a73dda18161b00f81df5e58d4b76b6b0935016f
      package profunctors (profunctors-5.3-a558598512ec4cae69d5dffed06cad314d78a309bf726671ee71fd9da1cd9a49) requires contravariant-1.5-74e4542f1e0a938a520203b56a73dda18161b00f81df5e58d4b76b6b0935016f
      package comonad (comonad-5.0.4-97aafe1ba2e521f866853f44d063ae3642a6378d5bdf1c051da2a40ea43a0dff) requires contravariant-1.5-74e4542f1e0a938a520203b56a73dda18161b00f81df5e58d4b76b6b0935016f
      package semigroupoids (semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c) requires contravariant-1.5-b7079f6dfdc4537b233a1b3314e4f4d98dca27fe75f30d78be223905f84ab9ec
      package profunctors (profunctors-5.3-2d985a7bbfaa3cf4fdde9d5092dabc06abb1a6041ef756fd8e21b942c6d63e7e) requires contravariant-1.5-b7079f6dfdc4537b233a1b3314e4f4d98dca27fe75f30d78be223905f84ab9ec
      package comonad (comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c) requires contravariant-1.5-b7079f6dfdc4537b233a1b3314e4f4d98dca27fe75f30d78be223905f84ab9ec
      package semigroupoids (semigroupoids-5.3.2-0fd6a99add629115bf5463cace858fab916f076d6253afaea2525009e0d5e360) requires distributive-0.6-24c63b7f913c0e8289752ff6dce683c25c57f12a2fcb15081b005d323f949cb8
      package profunctors (profunctors-5.3-a558598512ec4cae69d5dffed06cad314d78a309bf726671ee71fd9da1cd9a49) requires distributive-0.6-24c63b7f913c0e8289752ff6dce683c25c57f12a2fcb15081b005d323f949cb8
      package free (free-5.1-67a10ee4af3bf0c3507c9c2bfb2df0a9588692ff21e0198f4fc330f2bf2e4967) requires distributive-0.6-24c63b7f913c0e8289752ff6dce683c25c57f12a2fcb15081b005d323f949cb8
      package comonad (comonad-5.0.4-97aafe1ba2e521f866853f44d063ae3642a6378d5bdf1c051da2a40ea43a0dff) requires distributive-0.6-24c63b7f913c0e8289752ff6dce683c25c57f12a2fcb15081b005d323f949cb8
      package semigroupoids (semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c) requires distributive-0.6-e7019c98da9b737e65d6f0d72a7baeafa790bb0735a13abce801caa36adca32a
      package profunctors (profunctors-5.3-2d985a7bbfaa3cf4fdde9d5092dabc06abb1a6041ef756fd8e21b942c6d63e7e) requires distributive-0.6-e7019c98da9b737e65d6f0d72a7baeafa790bb0735a13abce801caa36adca32a
      package free (free-5.1-4d674cd8e409881401738f00e22e96d1f445ca197efa5773b9d3d9e905e1da70) requires distributive-0.6-e7019c98da9b737e65d6f0d72a7baeafa790bb0735a13abce801caa36adca32a
      package comonad (comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c) requires distributive-0.6-e7019c98da9b737e65d6f0d72a7baeafa790bb0735a13abce801caa36adca32a
      package LambdaHack (LambdaHack-0.9.2.0-25b8d9db7fe9a2c49db757f8fc8e3e6d2fc902e4adc22ca8740dd56a73f2a9f9) requires enummapset-0.6.0.1-43102742ffc732742304b05b25d761f5deb3f24e3f6f0c9ad71b1055c702fb05
      package LambdaHack (LambdaHack-0.9.2.0) requires enummapset-0.6.0.1-cbfb66ef51822a4c1d06bf9eceded8b1198483840a1662eb75fe500992859d27
      package sdl2 (sdl2-2.4.1.0-515ac05e7e03749e7d297e83741eba2961eee5070d1e5bcc1e6108d02ccd756f) requires exceptions-0.10.1-ae56595f2c22f63cdfbfb627a437ce4b7c79d5be0fd85ed52b3f9f684b944e35
      package free (free-5.1-4d674cd8e409881401738f00e22e96d1f445ca197efa5773b9d3d9e905e1da70) requires exceptions-0.10.1-ae56595f2c22f63cdfbfb627a437ce4b7c79d5be0fd85ed52b3f9f684b944e35
      package free (free-5.1-67a10ee4af3bf0c3507c9c2bfb2df0a9588692ff21e0198f4fc330f2bf2e4967) requires exceptions-0.10.1-ee72a69828f75d6e421783db7e429e100f26c16fec9e6034e04e5bc36f035afe
      package keys (keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e) requires free-5.1-4d674cd8e409881401738f00e22e96d1f445ca197efa5773b9d3d9e905e1da70
      package keys (keys-3.12.1-60c7303f4156386d1cd7ef27bcd618d7f12333214a0057002c23587ca7bdee44) requires free-5.1-67a10ee4af3bf0c3507c9c2bfb2df0a9588692ff21e0198f4fc330f2bf2e4967
      package unordered-containers (unordered-containers-0.2.10.0-90bca1e4730e255542829df4d22abd8adf214a406e12cfbbe249329a1125ed8a) requires hashable-1.2.7.0-1cee4bfd1838b26e163c3668c53516b65d131b9ca3b098530757e34bd545b38c
      package semigroupoids (semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c) requires hashable-1.2.7.0-1cee4bfd1838b26e163c3668c53516b65d131b9ca3b098530757e34bd545b38c
      package keys (keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e) requires hashable-1.2.7.0-1cee4bfd1838b26e163c3668c53516b65d131b9ca3b098530757e34bd545b38c
      package async (async-2.2.1-a29a918450bee8d046c58a121c671da6839cfbb80b5b32f0a9ca853cbace885a) requires hashable-1.2.7.0-1cee4bfd1838b26e163c3668c53516b65d131b9ca3b098530757e34bd545b38c
      package LambdaHack (LambdaHack-0.9.2.0) requires hashable-1.2.7.0-1cee4bfd1838b26e163c3668c53516b65d131b9ca3b098530757e34bd545b38c
      package unordered-containers (unordered-containers-0.2.10.0-903eb70ef8bd358ef492804c1137ea7d18637c1c0aec45478715090c86b2dc23) requires hashable-1.2.7.0-8b26326d56075ad5d4365ed969b36ad1d1b0031c5e0cefb0a90b284b81e2004d
      package semigroupoids (semigroupoids-5.3.2-0fd6a99add629115bf5463cace858fab916f076d6253afaea2525009e0d5e360) requires hashable-1.2.7.0-8b26326d56075ad5d4365ed969b36ad1d1b0031c5e0cefb0a90b284b81e2004d
      package keys (keys-3.12.1-60c7303f4156386d1cd7ef27bcd618d7f12333214a0057002c23587ca7bdee44) requires hashable-1.2.7.0-8b26326d56075ad5d4365ed969b36ad1d1b0031c5e0cefb0a90b284b81e2004d
      package LambdaHack (LambdaHack-0.9.2.0-25b8d9db7fe9a2c49db757f8fc8e3e6d2fc902e4adc22ca8740dd56a73f2a9f9) requires hashable-1.2.7.0-8b26326d56075ad5d4365ed969b36ad1d1b0031c5e0cefb0a90b284b81e2004d
      package pretty-show (pretty-show-1.9.5-e7a5481be560984824f74c167902aef106a46edc2309a36adf249e501070ae76) requires haskell-lexer-1.0.2-ecac81fac6b5511bac6e7e74881616d67cb82597f5d05b60c15661b81b90d30b
      package pretty-show (pretty-show-1.9.5-05b4ff049c5ef8b358acbcfb1b51a581ac4799b98f6928a9ef30663584e499b9) requires haskell-lexer-1.0.2-f50e38f2290efdb136753ae873ba5a8a9ee8bfe741b6d8d1c080ef93ee7bd03f
      package LambdaHack (LambdaHack-0.9.2.0-25b8d9db7fe9a2c49db757f8fc8e3e6d2fc902e4adc22ca8740dd56a73f2a9f9) requires keys-3.12.1-60c7303f4156386d1cd7ef27bcd618d7f12333214a0057002c23587ca7bdee44
      package LambdaHack (LambdaHack-0.9.2.0) requires keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e
      package miniutter (miniutter-0.5.0.0-6167491fb6f5738da1204da35fc654e2c68da88b477b60c4b4c7b8c66ec4e337) requires minimorph-0.2.1.0-099504d4a564b4581948a2706c88b3568d21d34f5e88179afea9a87c1d967d21
      package miniutter (miniutter-0.5.0.0-726355ba622057bc102c23edb53a65a861e6e8a97442a4caf1fbe37d1659e74b) requires minimorph-0.2.1.0-f751f0f71e9ab5be6437ceea48ca8259b514300b2cd5fe58317026eb93abee5d
      package LambdaHack (LambdaHack-0.9.2.0-25b8d9db7fe9a2c49db757f8fc8e3e6d2fc902e4adc22ca8740dd56a73f2a9f9) requires miniutter-0.5.0.0-6167491fb6f5738da1204da35fc654e2c68da88b477b60c4b4c7b8c66ec4e337
      package LambdaHack (LambdaHack-0.9.2.0) requires miniutter-0.5.0.0-726355ba622057bc102c23edb53a65a861e6e8a97442a4caf1fbe37d1659e74b
      package assert-failure (assert-failure-0.1.2.2-1d4875ae5dfc9005ae5cc573b7f3259bb884edb1232388c7f6349bce5deaef98) requires pretty-show-1.9.5-05b4ff049c5ef8b358acbcfb1b51a581ac4799b98f6928a9ef30663584e499b9
      package assert-failure (assert-failure-0.1.2.2-de21f694cfb032c206fedaa9442e732d1186f4a27230fdc2bb9773274c8750bb) requires pretty-show-1.9.5-e7a5481be560984824f74c167902aef106a46edc2309a36adf249e501070ae76
      package LambdaHack (LambdaHack-0.9.2.0) requires pretty-show-1.9.5-e7a5481be560984824f74c167902aef106a46edc2309a36adf249e501070ae76
      package vector (vector-0.12.0.2-faf07d1a6670dd58ab9d04d621cf978482c959a6c8bfeffb081d99d95bbe0610) requires primitive-0.6.4.0-e60c0400f5d0d0400adbdd3b58d2ae4bf01a12cc9b441a8fd7e2e2b1b623cdc4
      package LambdaHack (LambdaHack-0.9.2.0) requires primitive-0.6.4.0-e60c0400f5d0d0400adbdd3b58d2ae4bf01a12cc9b441a8fd7e2e2b1b623cdc4
      package vector (vector-0.12.0.2-723d7b53d70122ecfb1416c30e6fa085aff050ff77bc41309c3f3694ade2f821) requires primitive-0.6.4.0-e9e4caa65486ae60fe05ffb35ea7452c3425dea53b98b5bf22d5c92a1ccf3cb6
      package free (free-5.1-4d674cd8e409881401738f00e22e96d1f445ca197efa5773b9d3d9e905e1da70) requires profunctors-5.3-2d985a7bbfaa3cf4fdde9d5092dabc06abb1a6041ef756fd8e21b942c6d63e7e
      package free (free-5.1-67a10ee4af3bf0c3507c9c2bfb2df0a9588692ff21e0198f4fc330f2bf2e4967) requires profunctors-5.3-a558598512ec4cae69d5dffed06cad314d78a309bf726671ee71fd9da1cd9a49
      package LambdaHack (LambdaHack-0.9.2.0) requires random-1.1-b83f3cc2d1fbfe2c01fc9b01fe0bb59963f3fc47d7c811bd6540506a70d12ffb
      package LambdaHack (LambdaHack-0.9.2.0-25b8d9db7fe9a2c49db757f8fc8e3e6d2fc902e4adc22ca8740dd56a73f2a9f9) requires random-1.1-c4ce1004e7955597786ec781768e43219ab90094a384329291623691c3d437f7
      package keys (keys-3.12.1-60c7303f4156386d1cd7ef27bcd618d7f12333214a0057002c23587ca7bdee44) requires semigroupoids-5.3.2-0fd6a99add629115bf5463cace858fab916f076d6253afaea2525009e0d5e360
      package free (free-5.1-67a10ee4af3bf0c3507c9c2bfb2df0a9588692ff21e0198f4fc330f2bf2e4967) requires semigroupoids-5.3.2-0fd6a99add629115bf5463cace858fab916f076d6253afaea2525009e0d5e360
      package keys (keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e) requires semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c
      package free (free-5.1-4d674cd8e409881401738f00e22e96d1f445ca197efa5773b9d3d9e905e1da70) requires semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c
      package profunctors (profunctors-5.3-2d985a7bbfaa3cf4fdde9d5092dabc06abb1a6041ef756fd8e21b942c6d63e7e) requires semigroups-0.18.5-a5016e2359a935df9e8b02facb311e2bc8cedf3bdb195e0d22431b1e8a15d06f
      package keys (keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e) requires semigroups-0.18.5-a5016e2359a935df9e8b02facb311e2bc8cedf3bdb195e0d22431b1e8a15d06f
      package enummapset (enummapset-0.6.0.1-cbfb66ef51822a4c1d06bf9eceded8b1198483840a1662eb75fe500992859d27) requires semigroups-0.18.5-a5016e2359a935df9e8b02facb311e2bc8cedf3bdb195e0d22431b1e8a15d06f
      package comonad (comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c) requires semigroups-0.18.5-a5016e2359a935df9e8b02facb311e2bc8cedf3bdb195e0d22431b1e8a15d06f
      package profunctors (profunctors-5.3-a558598512ec4cae69d5dffed06cad314d78a309bf726671ee71fd9da1cd9a49) requires semigroups-0.18.5-d2f607eab17cb41f30764aa85f08da11d5259bb4d4ee0c389bcdf2ffd6e2d58a
      package keys (keys-3.12.1-60c7303f4156386d1cd7ef27bcd618d7f12333214a0057002c23587ca7bdee44) requires semigroups-0.18.5-d2f607eab17cb41f30764aa85f08da11d5259bb4d4ee0c389bcdf2ffd6e2d58a
      package enummapset (enummapset-0.6.0.1-43102742ffc732742304b05b25d761f5deb3f24e3f6f0c9ad71b1055c702fb05) requires semigroups-0.18.5-d2f607eab17cb41f30764aa85f08da11d5259bb4d4ee0c389bcdf2ffd6e2d58a
      package comonad (comonad-5.0.4-97aafe1ba2e521f866853f44d063ae3642a6378d5bdf1c051da2a40ea43a0dff) requires semigroups-0.18.5-d2f607eab17cb41f30764aa85f08da11d5259bb4d4ee0c389bcdf2ffd6e2d58a
      package semigroupoids (semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c) requires tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3
      package profunctors (profunctors-5.3-2d985a7bbfaa3cf4fdde9d5092dabc06abb1a6041ef756fd8e21b942c6d63e7e) requires tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3
      package keys (keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e) requires tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3
      package distributive (distributive-0.6-e7019c98da9b737e65d6f0d72a7baeafa790bb0735a13abce801caa36adca32a) requires tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3
      package comonad (comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c) requires tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3
      package bifunctors (bifunctors-5.5.4-c168083739f2c59329f01c3486d83ee9749de6b1b63bd1a7c962fcbb819a3a9c) requires tagged-0.8.6-79765432c8c11d76dbf32f088c4b6138cb4fcb08cfb4565d02c7258f766f9aa3
      package semigroupoids (semigroupoids-5.3.2-0fd6a99add629115bf5463cace858fab916f076d6253afaea2525009e0d5e360) requires tagged-0.8.6-c682998bf9ae7c10cc90a973bc252110b24942c70f29057b91b57a55ce04e543
      package profunctors (profunctors-5.3-a558598512ec4cae69d5dffed06cad314d78a309bf726671ee71fd9da1cd9a49) requires tagged-0.8.6-c682998bf9ae7c10cc90a973bc252110b24942c70f29057b91b57a55ce04e543
      package keys (keys-3.12.1-60c7303f4156386d1cd7ef27bcd618d7f12333214a0057002c23587ca7bdee44) requires tagged-0.8.6-c682998bf9ae7c10cc90a973bc252110b24942c70f29057b91b57a55ce04e543
      package distributive (distributive-0.6-24c63b7f913c0e8289752ff6dce683c25c57f12a2fcb15081b005d323f949cb8) requires tagged-0.8.6-c682998bf9ae7c10cc90a973bc252110b24942c70f29057b91b57a55ce04e543
      package comonad (comonad-5.0.4-97aafe1ba2e521f866853f44d063ae3642a6378d5bdf1c051da2a40ea43a0dff) requires tagged-0.8.6-c682998bf9ae7c10cc90a973bc252110b24942c70f29057b91b57a55ce04e543
      package bifunctors (bifunctors-5.5.4-75a4ac2e9f0908e67a77de1bd626c087534665a6aa1c1b92373bc8d8c724fa94) requires tagged-0.8.6-c682998bf9ae7c10cc90a973bc252110b24942c70f29057b91b57a55ce04e543
      package bifunctors (bifunctors-5.5.4-c168083739f2c59329f01c3486d83ee9749de6b1b63bd1a7c962fcbb819a3a9c) requires th-abstraction-0.3.1.0-76c84745d63f0f5ff7362f940ca0442b9b5318d0635b2f8c7f0f198ce4092612
      package bifunctors (bifunctors-5.5.4-75a4ac2e9f0908e67a77de1bd626c087534665a6aa1c1b92373bc8d8c724fa94) requires th-abstraction-0.3.1.0-83fd5fc72b916dd497b48c8b45946e2926bfea95f7d31e740b3ac6d1746b98dd
      package free (free-5.1-67a10ee4af3bf0c3507c9c2bfb2df0a9588692ff21e0198f4fc330f2bf2e4967) requires transformers-base-0.4.5.2-51e6db84f7015535335500226da6b044d7ab406bf7a13a2c98ebfd40ccd20706
      package free (free-5.1-4d674cd8e409881401738f00e22e96d1f445ca197efa5773b9d3d9e905e1da70) requires transformers-base-0.4.5.2-63cb7893a28d83ca9fe2120916b908e927ef73641addfb0c2dd3262d0122f038
      package transformers-base (transformers-base-0.4.5.2-63cb7893a28d83ca9fe2120916b908e927ef73641addfb0c2dd3262d0122f038) requires transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844
      package semigroupoids (semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c) requires transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844
      package optparse-applicative (optparse-applicative-0.14.3.0-cc35318103c80637869ae03e6b1fa1338334d8b503c5315d3d4b653e94ce626d) requires transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844
      package keys (keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e) requires transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844
      package exceptions (exceptions-0.10.1-ae56595f2c22f63cdfbfb627a437ce4b7c79d5be0fd85ed52b3f9f684b944e35) requires transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844
      package comonad (comonad-5.0.4-aca4f079089bceb66717add36ae6f034df10d3c92c43bcb0974d70289b4e230c) requires transformers-compat-0.6.4-146e83c0ad5ccecb8262ead056f6f53433d0fc899a1294a0e26619339047e844
      package transformers-base (transformers-base-0.4.5.2-51e6db84f7015535335500226da6b044d7ab406bf7a13a2c98ebfd40ccd20706) requires transformers-compat-0.6.4-ee08ba119bcce5112f54e07e61435be5fe6362212a28c8ad78c8baa9ebfb87b5
      package semigroupoids (semigroupoids-5.3.2-0fd6a99add629115bf5463cace858fab916f076d6253afaea2525009e0d5e360) requires transformers-compat-0.6.4-ee08ba119bcce5112f54e07e61435be5fe6362212a28c8ad78c8baa9ebfb87b5
      package keys (keys-3.12.1-60c7303f4156386d1cd7ef27bcd618d7f12333214a0057002c23587ca7bdee44) requires transformers-compat-0.6.4-ee08ba119bcce5112f54e07e61435be5fe6362212a28c8ad78c8baa9ebfb87b5
      package exceptions (exceptions-0.10.1-ee72a69828f75d6e421783db7e429e100f26c16fec9e6034e04e5bc36f035afe) requires transformers-compat-0.6.4-ee08ba119bcce5112f54e07e61435be5fe6362212a28c8ad78c8baa9ebfb87b5
      package comonad (comonad-5.0.4-97aafe1ba2e521f866853f44d063ae3642a6378d5bdf1c051da2a40ea43a0dff) requires transformers-compat-0.6.4-ee08ba119bcce5112f54e07e61435be5fe6362212a28c8ad78c8baa9ebfb87b5
      package semigroupoids (semigroupoids-5.3.2-0fd6a99add629115bf5463cace858fab916f076d6253afaea2525009e0d5e360) requires unordered-containers-0.2.10.0-903eb70ef8bd358ef492804c1137ea7d18637c1c0aec45478715090c86b2dc23
      package keys (keys-3.12.1-60c7303f4156386d1cd7ef27bcd618d7f12333214a0057002c23587ca7bdee44) requires unordered-containers-0.2.10.0-903eb70ef8bd358ef492804c1137ea7d18637c1c0aec45478715090c86b2dc23
      package LambdaHack (LambdaHack-0.9.2.0-25b8d9db7fe9a2c49db757f8fc8e3e6d2fc902e4adc22ca8740dd56a73f2a9f9) requires unordered-containers-0.2.10.0-903eb70ef8bd358ef492804c1137ea7d18637c1c0aec45478715090c86b2dc23
      package semigroupoids (semigroupoids-5.3.2-503e6442c9d847ddde10aa75817b48fd1ee0542dd8c2ae9cf8702370f4f64a2c) requires unordered-containers-0.2.10.0-90bca1e4730e255542829df4d22abd8adf214a406e12cfbbe249329a1125ed8a
      package keys (keys-3.12.1-ae2023e39b49e1921cee211b00c493138f926dafd748df0c027301223f3eac7e) requires unordered-containers-0.2.10.0-90bca1e4730e255542829df4d22abd8adf214a406e12cfbbe249329a1125ed8a
      package LambdaHack (LambdaHack-0.9.2.0) requires unordered-containers-0.2.10.0-90bca1e4730e255542829df4d22abd8adf214a406e12cfbbe249329a1125ed8a
      package vector-binary-instances (vector-binary-instances-0.2.5.1-07b8e049f2f7445fd2efaeb1e74af0b33399a2f5963f20b8164ecfd158af7f7a) requires vector-0.12.0.2-723d7b53d70122ecfb1416c30e6fa085aff050ff77bc41309c3f3694ade2f821
      package LambdaHack (LambdaHack-0.9.2.0-25b8d9db7fe9a2c49db757f8fc8e3e6d2fc902e4adc22ca8740dd56a73f2a9f9) requires vector-0.12.0.2-723d7b53d70122ecfb1416c30e6fa085aff050ff77bc41309c3f3694ade2f821
      package vector-binary-instances (vector-binary-instances-0.2.5.1-845df65ae676a80e5571a2ca8826a981f3dcb50a65776051d2d357a08ef3937a) requires vector-0.12.0.2-faf07d1a6670dd58ab9d04d621cf978482c959a6c8bfeffb081d99d95bbe0610
      package sdl2 (sdl2-2.4.1.0-515ac05e7e03749e7d297e83741eba2961eee5070d1e5bcc1e6108d02ccd756f) requires vector-0.12.0.2-faf07d1a6670dd58ab9d04d621cf978482c959a6c8bfeffb081d99d95bbe0610
      package LambdaHack (LambdaHack-0.9.2.0) requires vector-0.12.0.2-faf07d1a6670dd58ab9d04d621cf978482c959a6c8bfeffb081d99d95bbe0610
      package LambdaHack (LambdaHack-0.9.2.0-25b8d9db7fe9a2c49db757f8fc8e3e6d2fc902e4adc22ca8740dd56a73f2a9f9) requires vector-binary-instances-0.2.5.1-07b8e049f2f7445fd2efaeb1e74af0b33399a2f5963f20b8164ecfd158af7f7a
      package LambdaHack (LambdaHack-0.9.2.0) requires vector-binary-instances-0.2.5.1-845df65ae676a80e5571a2ca8826a981f3dcb50a65776051d2d357a08ef3937a
Preprocessing library for LambdaHack-0.9.2.0..
Building library for LambdaHack-0.9.2.0..
[  1 of 111] Compiling Game.LambdaHack.Client.AI.Strategy ( engine-src/Game/LambdaHack/Client/AI/Strategy.hs, dist/build/Game/LambdaHack/Client/AI/Strategy.o )
[  2 of 111] Compiling Game.LambdaHack.Client.ClientOptions ( engine-src/Game/LambdaHack/Client/ClientOptions.hs, dist/build/Game/LambdaHack/Client/ClientOptions.o )
[  3 of 111] Compiling Game.LambdaHack.Client.UI.Content.Screen ( engine-src/Game/LambdaHack/Client/UI/Content/Screen.hs, dist/build/Game/LambdaHack/Client/UI/Content/Screen.o )
[  4 of 111] Compiling Game.LambdaHack.Client.UI.Overlay ( engine-src/Game/LambdaHack/Client/UI/Overlay.hs, dist/build/Game/LambdaHack/Client/UI/Overlay.o )
[  5 of 111] Compiling Game.LambdaHack.Common.HSFile ( engine-src/Game/LambdaHack/Common/HSFile.hs, dist/build/Game/LambdaHack/Common/HSFile.o )
[  6 of 111] Compiling Game.LambdaHack.Common.File ( engine-src/Game/LambdaHack/Common/File.hs, dist/build/Game/LambdaHack/Common/File.o )
[  7 of 111] Compiling Game.LambdaHack.Common.Misc ( engine-src/Game/LambdaHack/Common/Misc.hs, dist/build/Game/LambdaHack/Common/Misc.o )
[  8 of 111] Compiling Game.LambdaHack.Common.Point ( engine-src/Game/LambdaHack/Common/Point.hs, dist/build/Game/LambdaHack/Common/Point.o )
[  9 of 111] Compiling Game.LambdaHack.Common.Area ( engine-src/Game/LambdaHack/Common/Area.hs, dist/build/Game/LambdaHack/Common/Area.o )
[ 10 of 111] Compiling Game.LambdaHack.Common.PointArray ( engine-src/Game/LambdaHack/Common/PointArray.hs, dist/build/Game/LambdaHack/Common/PointArray.o )
[ 11 of 111] Compiling Game.LambdaHack.Client.UI.Frame ( engine-src/Game/LambdaHack/Client/UI/Frame.hs, dist/build/Game/LambdaHack/Client/UI/Frame.o )
[ 12 of 111] Compiling Game.LambdaHack.Client.UI.Animation ( engine-src/Game/LambdaHack/Client/UI/Animation.hs, dist/build/Game/LambdaHack/Client/UI/Animation.o )
[ 13 of 111] Compiling Game.LambdaHack.Common.RingBuffer ( engine-src/Game/LambdaHack/Common/RingBuffer.hs, dist/build/Game/LambdaHack/Common/RingBuffer.o )
[ 14 of 111] Compiling Game.LambdaHack.Common.Thread ( engine-src/Game/LambdaHack/Common/Thread.hs, dist/build/Game/LambdaHack/Common/Thread.o )
[ 15 of 111] Compiling Game.LambdaHack.Common.Time ( engine-src/Game/LambdaHack/Common/Time.hs, dist/build/Game/LambdaHack/Common/Time.o )
[ 16 of 111] Compiling Game.LambdaHack.Client.UI.Msg ( engine-src/Game/LambdaHack/Client/UI/Msg.hs, dist/build/Game/LambdaHack/Client/UI/Msg.o )
[ 17 of 111] Compiling Game.LambdaHack.Common.Types ( engine-src/Game/LambdaHack/Common/Types.hs, dist/build/Game/LambdaHack/Common/Types.o )
[ 18 of 111] Compiling Game.LambdaHack.Common.Perception ( engine-src/Game/LambdaHack/Common/Perception.hs, dist/build/Game/LambdaHack/Common/Perception.o )

engine-src/Game/LambdaHack/Common/Perception.hs:43:23: error:
    • No instance for (Binary (ES.EnumSet Point))
        arising from the 'deriving' clause of a data type declaration
      Possible fix:
        use a standalone 'deriving instance' declaration,
          so you can specify the instance context yourself
      There are instances for similar types:
        instance (Enum k, Binary k) =>
                 Binary (enummapset-0.6.0.1:Data.EnumSet.EnumSet k)
          -- Defined in ‘Game.LambdaHack.Core.Prelude’
    • When deriving the instance for (Binary PerVisible)
   |
43 |   deriving (Show, Eq, Binary)
   |                       ^^^^^^

engine-src/Game/LambdaHack/Common/Perception.hs:47:23: error:
    • No instance for (Binary (ES.EnumSet Point))
        arising from the 'deriving' clause of a data type declaration
      Possible fix:
        use a standalone 'deriving instance' declaration,
          so you can specify the instance context yourself
      There are instances for similar types:
        instance (Enum k, Binary k) =>
                 Binary (enummapset-0.6.0.1:Data.EnumSet.EnumSet k)
          -- Defined in ‘Game.LambdaHack.Core.Prelude’
    • When deriving the instance for (Binary PerSmelled)
   |
47 |   deriving (Show, Eq, Binary)
   |                       ^^^^^^
cabal: Failed to build LambdaHack-0.9.2.0 (which is required by exe:LambdaHack
from LambdaHack-0.9.2.0).

~/teeeeeeeeee/LambdaHack$ 

@grayjay
Copy link
Collaborator

grayjay commented Apr 30, 2019

Thanks! I was able to reproduce the issue by enabling profiling in ~/.cabal/config and rebuilding. I'll look into it further when I have time.

@grayjay
Copy link
Collaborator

grayjay commented May 16, 2019

I think I have a minimal reproduction for the issue, which doesn't involve profiling:

  1. Create the following project. The exact file contents matter, though it seems easy to find different contents that reproduce the issue.

cabal.project:

packages: ./

README.md:

README

issue5782.cabal:

cabal-version: 2.2
name: issue5782
version: 0.1
build-type: Simple
data-files: README.md

library a
  hs-source-dirs: src
  exposed-modules: Module
  build-depends: base
  default-language: Haskell2010

library
  hs-source-dirs: src
  build-depends: a, base
  default-language: Haskell2010

library b
  hs-source-dirs: src
  build-depends: a, base
  default-language: Haskell2010

library c
  hs-source-dirs: src
  build-depends: issue5782, b, base
  default-language: Haskell2010

src/Module.hs:

module Module where

f = 0
  1. Install library c, without existing store or dist-newstyle directories. I used GHC 8.6.4 and cabal built at 6316102.
$ cabal --store-dir=/path/to/store/ new-install c -j1
  1. Replace "f = 0" with "f = 1" in Module.hs.

  2. Rerun the new-install command.

Output from the two install commands:

$ cabal --store-dir=/home/kristen/projects/cabal-issue-5782/issue5782/store/ new-install c -j1
Warning: The package list for 'hackage.haskell.org' is 17 days old.
Run 'cabal update' to get the latest list of available packages.
Wrote tarball sdist to
/home/kristen/projects/cabal-issue-5782/issue5782/dist-newstyle/sdist/issue5782-0.1.tar.gz
Warning: The package list for 'hackage.haskell.org' is 17 days old.
Run 'cabal update' to get the latest list of available packages.
Resolving dependencies...
Build profile: -w ghc-8.6.4 -O1
In order, the following will be built (use -v for more details):
 - issue5782-0.1 (lib:a) (requires build)
 - issue5782-0.1 (lib) (requires build)
 - issue5782-0.1 (lib:b) (requires build)
 - issue5782-0.1 (lib:c) (requires build)
Configuring library 'a' for issue5782-0.1..
Preprocessing library 'a' for issue5782-0.1..
Building library 'a' for issue5782-0.1..
[1 of 1] Compiling Module           ( src/Module.hs, dist/build/a/Module.o )
Installing internal library a in /home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/incoming/new-26351/home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/issue5782-0.1-a2f31e2086c9fb042c6b930e4f89a09040262d530e67ae90d52827988ab098ee/lib
Configuring library for issue5782-0.1..
Warning: The package has an extraneous version range for a dependency on an
internal library: issue5782 -any && ==0.1. This version range includes the
current package but isn't needed as the current package's library will always
be used.
Preprocessing library for issue5782-0.1..
Building library for issue5782-0.1..
Installing library in /home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/incoming/new-26351/home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/issue5782-0.1-9c21d145a7f7648847e92dd9ae091a2a708f3217b07ad3c19356f763a98912f7/lib
Configuring library 'b' for issue5782-0.1..
Warning: The package has an extraneous version range for a dependency on an
internal library: issue5782 -any && ==0.1. This version range includes the
current package but isn't needed as the current package's library will always
be used.
Preprocessing library 'b' for issue5782-0.1..
Building library 'b' for issue5782-0.1..
Installing internal library b in /home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/incoming/new-26351/home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/issue5782-0.1-28c9b7befe11fca89262a9947f2267446a3559cfded86b583863adc12875688f/lib
Configuring library 'c' for issue5782-0.1..
Warning: The package has an extraneous version range for a dependency on an
internal library: issue5782 -any && ==0.1 && ==0.1. This version range
includes the current package but isn't needed as the current package's library
will always be used.
Preprocessing library 'c' for issue5782-0.1..
Building library 'c' for issue5782-0.1..
Installing internal library c in /home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/incoming/new-26351/home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/issue5782-0.1-dc0204f4d90cf218f264923b1a0b6b1f4bf5f36bfbe9245ff8e96e4ac466f0be/lib
cabal: installdir is not defined. Set it in your cabal config file or use
--installdir=<path>

$ cabal --store-dir=/home/kristen/projects/cabal-issue-5782/issue5782/store/ new-install c -j1
Warning: The package list for 'hackage.haskell.org' is 17 days old.
Run 'cabal update' to get the latest list of available packages.
Wrote tarball sdist to
/home/kristen/projects/cabal-issue-5782/issue5782/dist-newstyle/sdist/issue5782-0.1.tar.gz
Warning: The package list for 'hackage.haskell.org' is 17 days old.
Run 'cabal update' to get the latest list of available packages.
Resolving dependencies...
Build profile: -w ghc-8.6.4 -O1
In order, the following will be built (use -v for more details):
 - issue5782-0.1 (lib:a) (requires build)
 - issue5782-0.1 (lib:b) (requires build)
 - issue5782-0.1 (lib) (requires build)
 - issue5782-0.1 (lib:c) (requires build)
Configuring library 'a' for issue5782-0.1..
Preprocessing library 'a' for issue5782-0.1..
Building library 'a' for issue5782-0.1..
[1 of 1] Compiling Module           ( src/Module.hs, dist/build/a/Module.o )
Installing internal library a in /home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/incoming/new-26843/home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/issue5782-0.1-ef80b19ef9f20154bd4c99ee527b386bc3ab59abd34dc767b85d20a2eb4132b1/lib
Configuring library 'b' for issue5782-0.1..
Warning: The package has an extraneous version range for a dependency on an
internal library: issue5782 -any && ==0.1. This version range includes the
current package but isn't needed as the current package's library will always
be used.
Preprocessing library 'b' for issue5782-0.1..
Building library 'b' for issue5782-0.1..
Installing internal library b in /home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/incoming/new-26843/home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/issue5782-0.1-ebd8ede636e3b2b97b2c51b15f6b9227045bd36e2f1deb6c4e51eb1198407554/lib
Configuring library for issue5782-0.1..
Warning: The package has an extraneous version range for a dependency on an
internal library: issue5782 -any && ==0.1. This version range includes the
current package but isn't needed as the current package's library will always
be used.
Preprocessing library for issue5782-0.1..
Building library for issue5782-0.1..
Installing library in /home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/incoming/new-26843/home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/issue5782-0.1-c3a91644a1e6be8d9c00a2c6ba5d19711e6a5851088866fdc8e88ae81ad5be71/lib
Configuring library 'c' for issue5782-0.1..
Warning: The package has an extraneous version range for a dependency on an
internal library: issue5782 -any && ==0.1 && ==0.1. This version range
includes the current package but isn't needed as the current package's library
will always be used.
Warning:
    This package indirectly depends on multiple versions of the same package. This is very likely to cause a compile failure.
      package issue5782 (issue5782-0.1-28c9b7befe11fca89262a9947f2267446a3559cfded86b583863adc12875688f) requires issue5782-0.1-a2f31e2086c9fb042c6b930e4f89a09040262d530e67ae90d52827988ab098ee
      package issue5782 (issue5782-0.1-c3a91644a1e6be8d9c00a2c6ba5d19711e6a5851088866fdc8e88ae81ad5be71) requires issue5782-0.1-ef80b19ef9f20154bd4c99ee527b386bc3ab59abd34dc767b85d20a2eb4132b1
Preprocessing library 'c' for issue5782-0.1..
Building library 'c' for issue5782-0.1..
Installing internal library c in /home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/incoming/new-26843/home/kristen/projects/cabal-issue-5782/issue5782/store/ghc-8.6.4/issue5782-0.1-25a053da11f92cba098fede172ee6a8bd35329f920b69520f3cd03a045d361b5/lib
cabal: installdir is not defined. Set it in your cabal config file or use
--installdir=<path>

Removing any of the four components removes the "multiple versions" warning, presumably because it breaks the diamond shape in the dependencies, but I didn't yet test whether cabal still uses the old version of one of the components.

@JoshMeredith
Copy link
Collaborator

After testing by importing a definition directly and indirectly through packages that produce the warning, it seems that the warning is a false positive - at least in projects that don't use backpack features (where the warning comes from).

I've also noticed that the In order, the following will be built output seems to indicate that it is in fact correctly rebuilding the components that it needs to.

The question then becomes: is the code that checks before outputting the warning correct for some cases when backpack features are used, or is it simply overzealous in general?

A number of TODO and question comments around this warning seem to indicate that the second case might be true.

@Mikolaj
Copy link
Member

Mikolaj commented Apr 13, 2021

Weakly related: #7311 (and the GHC issue mentioned in there).

@mpickering
Copy link
Collaborator

I can definitely believe there is a bug here in GHC after reading the code but I can't reproduce using @Mikolaj's example.

@phadej
Copy link
Collaborator

phadej commented Apr 15, 2021

@mpickering I think it's cabal-install which mixes up unit ids, see #6211 which I think is a duplicate - but I'm not 100% sure.

@Mikolaj
Copy link
Member

Mikolaj commented Apr 16, 2021

BTW, the wonderful @grayjay 's repro no longer works with cabal 3.5 and GHC 9.0.1 (and probably many older setups). I've played with it and the following two look buggy and similar [edit: but don't repro the original problem]. To be run with something like cabal --store-dir=/home/mikolaj/r/test2/st2 new-install -j1.

test2.couldNotLoad.tar.gz
test3.couldNotLoad.tar.gz

Edit: actually the two tests only trigger wrong "Perhaps you need to add" hints (one that hints to add a dep that is already there and another that hints to add a dep that does not help at all) and not any other problem, the original bug in particular. I was also wrong about implicit re-exports, so I removed the remark.

Edit2; reported at https://gitlab.haskell.org/ghc/ghc/-/issues/19777

@Mikolaj
Copy link
Member

Mikolaj commented Apr 29, 2021

My failure to reproduce @grayjay's example with cabal 3.5 and GHC 9.0.1 leads to me to believe that at least the implicit reexporting of internal libraries a library depends on has been fixed and, perhaps, the original bug has been fixed as a side-effect. I will try to reproduce using my own much bigger reproducer from earlier comments. Here is the closest rendering of @grayjay's example .cabal file that doesn't fail for unrelated reasons and that, now, compiles fine and then recompiles (without the offending warning) fine after a change (the other files are as in the archives I attached earlier, the command is cabal --store-dir=/home/mikolaj/r/test2/st8 new-install -j1):

cabal-version: 2.2
name: issue5782
version: 0.1
build-type: Simple
data-files: README.md

library a
  hs-source-dirs: src
  exposed-modules: Module
  build-depends: base
  default-language: Haskell2010

library
  hs-source-dirs: src2
  build-depends: a, base
  default-language: Haskell2010
  reexported-modules: Module

library b
  hs-source-dirs: src2
  build-depends: a, base
  default-language: Haskell2010
  reexported-modules: Module

executable E
  main-is:            Main.hs
  build-depends:      issue5782, b, base

Edit: and the following slightly changed variant, which should probably pass, fails with

Configuring executable 'E' for issue5782-0.1..
cabal: Encountered missing or private dependencies:
issue5782:{b, z} ==0.1

which may or may not be related.

cabal-version: 2.2
name: issue5782
version: 0.1
build-type: Simple
data-files: README.md

library a
  hs-source-dirs: src
  exposed-modules: Module
  build-depends: base
  default-language: Haskell2010

library z
  hs-source-dirs: src2
  build-depends: a, base
  default-language: Haskell2010
  reexported-modules: Module

library b
  hs-source-dirs: src2
  build-depends: a, base
  default-language: Haskell2010
  reexported-modules: Module

executable E
  main-is:            Main.hs
  build-depends:      z, b, base

@Mikolaj
Copy link
Member

Mikolaj commented May 1, 2021

I've performed my original consistent repro, LambdaHack with profiling, and with cabal 3.5 and GHC 9.0.1 there's neither the warning nor the error. It's quite possible the bug has been fixed.

@vmchale, everybody, did you see such problems lately? If not, can we close this issue (and a dozen related ones)?

@Mikolaj
Copy link
Member

Mikolaj commented May 6, 2021

Nobody reports that this issue is reproducible with current stable cabal or newer, so, if @emilypi, @fgaz and others don't object, I'm going to close this soon, together with half a dozen related issues (some of them mentioned in GHC tickets, so the noise is considerable). BTW, thank you everybody for providing repros and comments --- I'm sure they were helpful in keeping the work on the improvements in the area going, even if we eventually missed the point when the problem was finally fixed for good and the issues didn't get closed with proper thanks to all involved.

@jneira
Copy link
Member

jneira commented May 6, 2021

I am for closing optimistically issues, but would be great to know what was the cause of the bug, what commits fixed it and what regression tests will ensure it will not arise again.
Maybe it is asking too much, I know. 🙂

@Mikolaj
Copy link
Member

Mikolaj commented May 6, 2021

@jneira: no, these are reasonable aspirations and an especially good point about adding tests. Sadly, the only reasonably small original repro, by @grayjay, no longer works for unrelated reasons (many things changed since then). We could use my first test from #5782 (comment) (it can be simplified a bit, but I tried to keep it close to the original) but the problem is it has never failed (and I'm not sure it would be accepted in cabal version old enough to trigger the original error --- could you perhaps try to iterate through versions and find one where it fails for the right reason?). Generally, this and the related issues were hard to repro, where many initial repros non-deterministic, etc., so it's a lot of extra work especially after such a long time. I'm afraid we don't have the capacity ATM, unless somebody helps. Volunteers?

@jneira
Copy link
Member

jneira commented May 6, 2021

Yeah this is one of the really fun kind of bugs. Maybe if we only would know what pr or commits are the main candidates for having been the ones which have fixed it...
We experienced it in haskell-language-server when we had a private library for shared testing code, but not consistently, removing the store fixed it iirc. We had to convert it in a package due to this bug (i guess many projects had to do it, even without reporting it here)

@Mikolaj
Copy link
Member

Mikolaj commented May 6, 2021

You are right, this issue may have been more widespread than meets the eye. Therefore, if somebody would volunteer to bisect cabal commits history using my test from #5782 (comment), that would be very welcome. Also, any running any likely reproduction, successfully or not, with an up to date cabal version would help.

I will ask on the other issues related to this one [edit: will limit myself to cabal issues, there's too many in other repos, e.g., changing internal libraries to common stanzas] and wait for a week.

@Mikolaj
Copy link
Member

Mikolaj commented May 6, 2021

BTW, Oleg says in #6483 (comment) that possibly the commit fixing #6410 also fixed this set of problems and he confirms he can't repro his original examples either. Perhaps worth testing the commit just before the one that fixes #6410 and then the one, e.g., with my test above?

Edit: And the commit in question is backported twice, one time as far back as to v3.0.1.0: 9089b0e which would suggest original v3.0 had the problem, but an updated v.3.0 didn't and v3,2 didn't have the problem from the start.

@Mikolaj
Copy link
Member

Mikolaj commented May 7, 2021

Data point: my test compiles fine (two runs, with changed code in Module.hs in between) with cabal 3.3 and GHC 8.6.5.

@Mikolaj
Copy link
Member

Mikolaj commented May 7, 2021

Data point 2: but it fails in the following way, matching the problem we are after, with cabal 3.0.2.0 and GHC 8.6.5. Which either means it's not deterministic, after all (but I think these little tests are) or the fix for #6410 did not yet (fully) solve the problem [edit: not so, I mixed up Cabal and cabal-install versions, see next comment].

Warning:
    This package indirectly depends on multiple versions of the same package. This is very likely to cause a compile failure.
      package issue5782 (issue5782-0.1-b379e21ae10612a6be4c01124c6ae3bfe6ada3d03f6d2f99f798f34eb03f62be) requires issue5782-0.1-7c4c83c60d0795ab7f04de846f6f2cc5e8a9ca5f639cdd984b12c134915760b7
      package issue5782 (issue5782-0.1-7aa38f4a18910b6e6d56dfb4e7fbe2633a001ed1f855f8a78a3f931e96bd4efa) requires issue5782-0.1-c3ebad1f5993f364b4845539864c7ea611b3488fa779084dbf562a39492d7f69
Preprocessing executable 'E' for issue5782-0.1..
Building executable 'E' for issue5782-0.1..
[1 of 1] Compiling Main             ( Main.hs, dist/build/E/E-tmp/Main.o )

Main.hs:1:1: error:
    Ambiguous module name ‘Module’:
      it was found in multiple packages: issue5782-0.1 issue5782-0.1
  |
1 | import Module
  | ^^^^^^^^^^^^^
cabal: Failed to build exe:E from issue5782-0.1.

Edit: yet another explanation might be that some change tweaked the non-determinism so that the problem does not manifest in the small tests, but still manifests in huge ones that involve strange timing of file writes, etc.

@Mikolaj
Copy link
Member

Mikolaj commented May 7, 2021

Data point 3: my test passes fine with cabal 3.2 and GHC 8.6.5.

BTW, I've double-checked and the fix to #6410 seems to be included in cabal-install 3.0.1.0, which was never released until cabal-install 3.2. I don't see any evidence it was included in Cabal 3.0.2.0, only in Cabal 3.2.0.0 (alpha). So, in the end, this is consistent with Oleg's hunch which commit fixed it.

Edit: even though it passes fine and there are no warnings "indirectly depends on multiple versions", the executable gives a wrong result, ignoring the change to the file and the second compilation. So 3.2 probably fixed depending on multiple version, but the single version the executable depends on is the wrong one (the older one).

@Mikolaj
Copy link
Member

Mikolaj commented May 7, 2021

Data point 4: cabal 3.4 (with GHC 8.6.5) fixes this for good, both no longer depending on multiple versions of an internal library and actually depending on the last compiled version, not the first compiled version.

That's as far as I have capacity to go. If anybody would like to bisect to find the relevant commit(s), please volunteer before or after I close the issue and share here in a comment.

The great outcome of @jneira aspirations and this series of tests is that we now know what to include as regression test (and that we need to run the executable and check the result or carefully inspect the install plan --- grepping for a warning is not enough). Any volunteer to add the test to our test suite? It can still be simplified, I'm sure.

@jneira
Copy link
Member

jneira commented May 7, 2021

wow, impressive summary of the state of things, many thanks
btw I had forgotten my own issue 😂

@Mikolaj
Copy link
Member

Mikolaj commented May 11, 2021

Nobody volunteered nor dissuaded me, so I'm adding the test for this issue myself. I can't find a similar test. All have too few internal libraries to form a diamond. Directory cabal/cabal-testsuite/PackageTests/InternalLibraries sounds like the right place to add one.

Mikolaj added a commit that referenced this issue May 24, 2021
Add regression test for #5782, which requires extending test harness to v2-install
@Mikolaj
Copy link
Member

Mikolaj commented May 24, 2021

We have the regression test in place and it fails with cabal 3.2 (and even more often with 3.0) and works with 3.4, Closing. Thank you all.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants