5

I am writing a small Haskell program which need import two modules Control.Functor.Algebra and Control.Morphism.Hylo.

I searched the google. These two modules can be found in category-extras.

So I added category-extras to package.yaml:

dependencies:
- base >= 4.7 && < 5
- category-extras

Then call stack build, but error occured:

E:\work-category-theory\quick-sort>stack build
Stack has not been tested with GHC versions above 8.6, and using 8.8.3, this may fail
Stack has not been tested with Cabal versions above 2.4, but version 3.0.1.0 was found, this may fail

Error: While constructing the build plan, the following exceptions were
encountered:

In the dependencies for quick-sort-0.1.0.0:
    category-extras needed, but the stack configuration has no specified
                    version  (latest matching version is 1.0.2)
needed since quick-sort is a build target.

Some different approaches to resolving this:

  * Recommended action: try adding the following to your extra-deps
    in E:\work-category-theory\quick-sort\stack.yaml:

- category-extras-1.0.2@sha256:511a5668e05af6617d94080e866c9a496e0abd7625d961264755614a73b517f1,10259

Plan construction failed.

Following the prompts, I added category-extras-1.0.2@sha256:511a5668e05af6617d94080e866c9a496e0abd7625d961264755614a73b517f1,10259 to the extra-deps in stack.yaml:

extra-deps:
  - category-extras-1.0.2@sha256:511a5668e05af6617d94080e866c9a496e0abd7625d961264755614a73b517f1,10259

But still failed:

E:\work-category-theory\quick-sort>stack build
Stack has not been tested with GHC versions above 8.6, and using 8.8.3, this may fail
Stack has not been tested with Cabal versions above 2.4, but version 3.0.1.0 was found, this may fail

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for category-extras-1.0.2:
    categories needed, but the stack configuration has no specified version  (latest matching version is 1.0.7)
    comonad-extras needed, but the stack configuration has no specified version  (latest matching version is 4.0.1)
    comonad-transformers needed, but the stack configuration has no specified version  (latest matching version is 4.0)
    comonads-fd needed, but the stack configuration has no specified version  (latest matching version is 4.0)
    groupoids needed, but the stack configuration has no specified version  (latest matching version is 4.0)
    indexed-extras needed, but the stack configuration has no specified version  (latest matching version is 0.2)
    profunctor-extras needed, but the stack configuration has no specified version  (latest matching version is 4.0)
    representable-functors needed, but the stack configuration has no specified version  (latest matching version
                           is 3.2.0.2)
    representable-profunctors needed, but the stack configuration has no specified version  (latest matching version
                              is 3.2)
needed due to quick-sort-0.1.0.0 -> category-extras-1.0.2

Some different approaches to resolving this:

  * Recommended action: try adding the following to your extra-deps in E:\work-category-theory\quick-sort\stack.yaml:

- categories-1.0.7@sha256:e707f8ac06eac755cb508aa67de64ab2e33ce1c54aebb6f43f64c615aa5234f6,1636
- comonad-extras-4.0.1@sha256:60c93aa274239086d96d162c3c8bf7cde33a3e8470ecb56461b2f77d2625521e,1321
- comonad-transformers-4.0@sha256:cdc81f6837836ec4b120ced8503b54a7f1e230e08971cc01717dcd16ba1ceb28,831
- comonads-fd-4.0@sha256:92ed08f50f64aa9ce57214c9f0539e0244225ef4c934065dff819a751b89eeaf,817
- groupoids-4.0@sha256:7d26a2cc5e557773b565f2433b898d7472404a03bafde51fec5f4a7c7936812e,836
- indexed-extras-0.2@sha256:e7e498023e33016fe45467dfee3c1379862e7e6654a806a965958fa1adc00304,1349
- profunctor-extras-4.0@sha256:b436587378964546df3063dad44504fd698cce0f714ce089c1e3b499f063940d,874
- representable-functors-3.2.0.2@sha256:f15e598ca712171408d919803a48dcf786c94e9596a65336a3d66d0886ca60c5,1877
- representable-profunctors-3.2@sha256:d7d902ab21de5bcf9ceeb1b13529aa835a818dad00e75da999241508f89f85c2,786

Plan construction failed.

Following the prompts, I continue to add extra-deps in stack.yaml:

extra-deps:
  - category-extras-1.0.2@sha256:511a5668e05af6617d94080e866c9a496e0abd7625d961264755614a73b517f1,10259
  - categories-1.0.7@sha256:e707f8ac06eac755cb508aa67de64ab2e33ce1c54aebb6f43f64c615aa5234f6,1636
  - comonad-extras-4.0.1@sha256:60c93aa274239086d96d162c3c8bf7cde33a3e8470ecb56461b2f77d2625521e,1321
  - comonad-transformers-4.0@sha256:cdc81f6837836ec4b120ced8503b54a7f1e230e08971cc01717dcd16ba1ceb28,831
  - comonads-fd-4.0@sha256:92ed08f50f64aa9ce57214c9f0539e0244225ef4c934065dff819a751b89eeaf,817
  - groupoids-4.0@sha256:7d26a2cc5e557773b565f2433b898d7472404a03bafde51fec5f4a7c7936812e,836
  - indexed-extras-0.2@sha256:e7e498023e33016fe45467dfee3c1379862e7e6654a806a965958fa1adc00304,1349
  - profunctor-extras-4.0@sha256:b436587378964546df3063dad44504fd698cce0f714ce089c1e3b499f063940d,874
  - representable-functors-3.2.0.2@sha256:f15e598ca712171408d919803a48dcf786c94e9596a65336a3d66d0886ca60c5,1877
  - representable-profunctors-3.2@sha256:d7d902ab21de5bcf9ceeb1b13529aa835a818dad00e75da999241508f89f85c2,786

Failed again:

E:\work-category-theory\quick-sort>stack build
Stack has not been tested with GHC versions above 8.6, and using 8.8.3, this may fail
Stack has not been tested with Cabal versions above 2.4, but version 3.0.1.0 was found, this may fail

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for representable-functors-3.2.0.2:
    comonad-5.0.6 from stack configuration does not match >=3 && <4  (latest matching version is 3.1)
    comonad-transformers-4.0 from stack configuration does not match >=3 && <4  (latest matching version is 3.1)
    comonads-fd-4.0 from stack configuration does not match >=3 && <4  (latest matching version is 3.0.3)
    containers-0.6.2.1 from stack configuration does not match >=0.3 && <0.6  (latest matching version is 0.5.11.0)
    contravariant-1.5.2 from stack configuration does not match >=0.4.1 && <1  (latest matching version is 0.6.1.1)
    free-5.1.3 from stack configuration does not match >=3 && <4  (latest matching version is 3.4.2)
    mtl-2.2.2 from stack configuration does not match >=2.0.1.0 && <2.2  (latest matching version is 2.1.3.1)
    semigroupoids-5.3.4 from stack configuration does not match >=3 && <4  (latest matching version is 3.1)
    transformers-0.5.6.2 from stack configuration does not match >=0.2 && <0.4  (latest matching version is 0.3.0.0)
needed due to quick-sort-0.1.0.0 -> representable-functors-3.2.0.2

Some different approaches to resolving this:

  * Set 'allow-newer: true' in C:\sr\config.yaml to ignore all version constraints and build anyway.

  * Recommended action: try adding the following to your extra-deps in E:\work-category-theory\quick-sort\stack.yaml:

- comonad-3.1@sha256:95ab6440e380de06c6167f52a29903bee3e06295bb15598687305755eb1febd9,1635
- comonad-transformers-3.1@sha256:6641d4d5466a1e5e5b3863654d1df224c0980c332cf648b17ff148312bcf3f3b,1372
- comonads-fd-3.0.3@sha256:7fd04f220367fe8c0cd2b8c35ca15bc77a7d93a3d45f276435a094f9bdb44a60,1376
- containers-0.5.11.0@sha256:28ad7337057442f75bc689315ab4ec7bdf5e6b2c39668f306672cecd82c02798,16685
- contravariant-0.6.1.1@sha256:715c882354db424ed8b79518dab90e103a30a0ac64229f6cc86f0b3bb036c5dc,1493
- free-3.4.2@sha256:ddb52e32cb0e219e7d46b7021c7d1ec54797df878fd1b1ede0732bcacafdd9f0,2262
- mtl-2.1.3.1@sha256:a4283d5070cef5061aa8888c88baf50cd2db1904b254701321a93cf6c0835a11,1618
- semigroupoids-3.1@sha256:66c4375dabc33cff413ab5c1bc73c313fd2768ae21504b1cd1ac9aa8705529dd,3550
- transformers-0.3.0.0@sha256:4ec3dd53be60415dad46e00ec6c7f78bdc37dcda1670cf5abe5c480719b78b60,2318

Plan construction failed.

OK, I continue to add..

  - category-extras-1.0.2@sha256:511a5668e05af6617d94080e866c9a496e0abd7625d961264755614a73b517f1,10259
  - categories-1.0.7@sha256:e707f8ac06eac755cb508aa67de64ab2e33ce1c54aebb6f43f64c615aa5234f6,1636
  - comonad-extras-4.0.1@sha256:60c93aa274239086d96d162c3c8bf7cde33a3e8470ecb56461b2f77d2625521e,1321
  - comonad-transformers-4.0@sha256:cdc81f6837836ec4b120ced8503b54a7f1e230e08971cc01717dcd16ba1ceb28,831
  - comonads-fd-4.0@sha256:92ed08f50f64aa9ce57214c9f0539e0244225ef4c934065dff819a751b89eeaf,817
  - groupoids-4.0@sha256:7d26a2cc5e557773b565f2433b898d7472404a03bafde51fec5f4a7c7936812e,836
  - indexed-extras-0.2@sha256:e7e498023e33016fe45467dfee3c1379862e7e6654a806a965958fa1adc00304,1349
  - profunctor-extras-4.0@sha256:b436587378964546df3063dad44504fd698cce0f714ce089c1e3b499f063940d,874
  - representable-functors-3.2.0.2@sha256:f15e598ca712171408d919803a48dcf786c94e9596a65336a3d66d0886ca60c5,1877
  - representable-profunctors-3.2@sha256:d7d902ab21de5bcf9ceeb1b13529aa835a818dad00e75da999241508f89f85c2,786
  - comonad-3.1@sha256:95ab6440e380de06c6167f52a29903bee3e06295bb15598687305755eb1febd9,1635
  - comonad-transformers-3.1@sha256:6641d4d5466a1e5e5b3863654d1df224c0980c332cf648b17ff148312bcf3f3b,1372
  - comonads-fd-3.0.3@sha256:7fd04f220367fe8c0cd2b8c35ca15bc77a7d93a3d45f276435a094f9bdb44a60,1376
  - containers-0.5.11.0@sha256:28ad7337057442f75bc689315ab4ec7bdf5e6b2c39668f306672cecd82c02798,16685
  - contravariant-0.6.1.1@sha256:715c882354db424ed8b79518dab90e103a30a0ac64229f6cc86f0b3bb036c5dc,1493
  - free-3.4.2@sha256:ddb52e32cb0e219e7d46b7021c7d1ec54797df878fd1b1ede0732bcacafdd9f0,2262
  - mtl-2.1.3.1@sha256:a4283d5070cef5061aa8888c88baf50cd2db1904b254701321a93cf6c0835a11,1618
  - semigroupoids-3.1@sha256:66c4375dabc33cff413ab5c1bc73c313fd2768ae21504b1cd1ac9aa8705529dd,3550
  - transformers-0.3.0.0@sha256:4ec3dd53be60415dad46e00ec6c7f78bdc37dcda1670cf5abe5c480719b78b60,2318

Now there is a new error occurred:

E:\work-category-theory\quick-sort>stack build
The same package name is used in multiple local packages

comonad-transformers used in:
- PLImmutable (PLIHackage (PackageIdentifier {pkgName = PackageName "comonad-transformers", pkgVersion = mkVersion [3,1]
}) 6641d4d5466a1e5e5b3863654d1df224c0980c332cf648b17ff148312bcf3f3b,1372 (TreeKey ced3d6e9e6804e43646e6f8b23c8354808074a
403efeadc3e9befd628a78ea46,1116))
- PLImmutable (PLIHackage (PackageIdentifier {pkgName = PackageName "comonad-transformers", pkgVersion = mkVersion [4,0]
}) cdc81f6837836ec4b120ced8503b54a7f1e230e08971cc01717dcd16ba1ceb28,831 (TreeKey 1319b9d5039d6252803e684d0e42431867b20c9
03b49ddb6d5910b2b8eeb02e7,414))

comonads-fd used in:
- PLImmutable (PLIHackage (PackageIdentifier {pkgName = PackageName "comonads-fd", pkgVersion = mkVersion [3,0,3]}) 7fd0
4f220367fe8c0cd2b8c35ca15bc77a7d93a3d45f276435a094f9bdb44a60,1376 (TreeKey 7714b845bc4ba432b5b48054a45ba606ce72c7bfa2242
d3faed5387f8786e5b5,709))
- PLImmutable (PLIHackage (PackageIdentifier {pkgName = PackageName "comonads-fd", pkgVersion = mkVersion [4,0]}) 92ed08
f50f64aa9ce57214c9f0539e0244225ef4c934065dff819a751b89eeaf,817 (TreeKey 275c7b8e4336d289ef0f280260ac9da408f1b41bd2a49b1c
55699bfbf96c9c82,463))

It seems that there is some duplicate packages (comonad-transformers and comonads-fd)?

I remove lower version and rebuild it:

E:\work-category-theory\quick-sort>stack build
Stack has not been tested with GHC versions above 8.6, and using 8.8.3, this may fail
Stack has not been tested with Cabal versions above 2.4, but version 3.0.1.0 was found, this may fail

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for cabal-doctest-1.0.8:
    Cabal must match >=1.10 && <3.3, but the stack configuration has no specified version  (latest matching version
          is 3.2.0.0)
needed due to quick-sort-0.1.0.0 -> cabal-doctest-1.0.8

In the dependencies for distributive-0.6.2:
    Cabal needed, but the stack configuration has no specified version  (latest matching version is 3.2.0.0)
needed due to quick-sort-0.1.0.0 -> distributive-0.6.2

In the dependencies for hashable-1.3.0.0:
    text must match >=0.12 && <1.3, but the stack configuration has no specified version  (latest matching version
         is 1.2.4.0)
needed due to quick-sort-0.1.0.0 -> hashable-1.3.0.0

In the dependencies for reducers-3.12.3:
    text must match >=0.11.1.5 && <1.3, but the stack configuration has no specified version  (latest matching version
         is 1.2.4.0)
needed due to quick-sort-0.1.0.0 -> reducers-3.12.3

In the dependencies for transformers-0.3.0.0:
    base-4.13.0.0 from stack configuration does not match >=2 && <4.8  (latest matching version is 4.7.0.2)
needed due to quick-sort-0.1.0.0 -> transformers-0.3.0.0

Some different approaches to resolving this:

  * Build requires unattainable version of base. Since base is a part of GHC, you most likely need to use a different
    GHC version with the matching base.

Plan construction failed.

Now I have been completely confused...

Why stack can't resolve packages' dependencies automatically?

Can someone help me?

Very thanks!

chansey
  • 1,266
  • 9
  • 20
  • 1
    `stack` was built explicitly because the authors believed that resolving package dependencies automatically was a big mistake. That is the true answer to "why". But there are workarounds; hopefully some folks will write them up some. Or you could switch to `cabal`, which embraces dependency solving; this introduces problems of its own. It's a tradeoff. – Daniel Wagner Apr 20 '20 at 16:53
  • @DanielWagner Thanks, maybe I should switch to `cabal`... but before that, is there any way to workaround this issue by `stack`? I just want to import two modules `Control.Functor.Algebra` and `Control.Morphism.Hylo` from [category-extras](https://hackage.haskell.org/package/category-extras) ... – chansey Apr 20 '20 at 17:06
  • 1
    `category-extras` is deprecated. Is this a new project? If so, then use `recursion-schemes` and `Data.Functor.Foldable` instead. – Joseph Sible-Reinstate Monica Apr 20 '20 at 17:11
  • @JosephSible-ReinstateMonica Yes, it is new project (a small program). I just use `Algebra`, `Coalgebra` and `hylo` to implement quick-sort. I can write these type constructor and function by myself. For DRY, I found these packages from hackage... – chansey Apr 20 '20 at 17:23
  • I didn't say write them by yourself. I said to use `recursion-schemes` and `Data.Functor.Foldable`, the replacements for the deprecated modules you want. – Joseph Sible-Reinstate Monica Apr 20 '20 at 17:25

1 Answers1

2

Quoting a comment:

Yes, it is new project (a small program). I just use Algebra, Coalgebra and hylo to implement quick-sort. I can write these type constructor and function by myself. For DRY, I found these packages from hackage...

If you need the package exclusively for that, just switch to recursion-schemes as Joseph Sible suggests and spare yourself the trouble. That said, it won't hurt to say a thing or two about the installation difficulties you noted.


category-extras is a very large and very old library which was, a long time ago, split into many other libraries. Ideally, you'd just install some or all of the replacement libraries and forget about category-extras entirely. Unfortunately, Control.Functor.Algebra didn't get an official replacement, according to the list of replacements from the version 1.02 docs (in the case of Control.Morphism.Hylo, at least some of the functionality can be obtained with recursion-schemes). That means you might still want to actually use category-extras.

In any case, one thing you definitely don't want is to install category-extras-1.0.2, the most recent version. It is just a meta-package that provides no code of its own, merely pulling a large number of replacement packages. Furthermore, since that version is from 2012, many of those replacement packages were themselves replaced at this point.

If you really must use category-extras, your best bet might be sticking to category-extras-0.53.5.1 (I'm linking to 0.53.5 because the 0.53.5.1 docs don't show up properly on Hackage), the latest version before the split. It depends on mtl < 2, which is annoying because that is an extremely old version of a package that is used pretty much everywhere. Furthermore, mtl-1.1.1 has a base < 4.6 upper bound. That means GHC 7.4.2 or older is needed, and so installing it with Stack won't work. ghcup won't help either (the earliest GHC it supports is 7.10.3), so you'd have to do a standalone installation GHC 7.4.2, either in a VM or using some other strategy to keep it apart from your usual GHC version.

duplode
  • 33,731
  • 7
  • 79
  • 150
  • Thanks. I switch to `recursion-schemes` and it works now. Except that now I need define 2 type synonym `type Algebra f a = f a -> a` and `type Coalgebra f a = a -> f a`, because this two algebra name not in `recursion-schemes` explicitly. Of course, this is not a problem. – chansey Apr 20 '20 at 18:07
  • But `category-extras` still have problem. I added `category-extras-0.53.5.1` and `mtl-1.1.1` as you mentioned, but build failed. ``` Could not find mtl-1.1.0 on Hackage Possible candidates: mtl-1.1.0.0@sha256:c3bf627e5c11b6e42479e9adf8acabcc0cac9a06d55bc0330d1506eb93aa45d1,1327, mtl-1.1.0.1@sha256:b742b0563bc6d9992e84985d1de1a4c3eada09c3119738194422c9bcd7efd46d,1327, ... ``` – chansey Apr 20 '20 at 18:10
  • And these candidates also fails (say my base version doesn't match)... These issues may need to investigate further in the future. – chansey Apr 20 '20 at 18:27
  • 1
    @chansey I had overlooked that `mtl-1.1.1` has a `base < 4.6` upper bound. Though the bound was retroactively added through a Hackage revision, it presumably was added because `mtl-1.1.1` won't build correctly with recent GHCs. `base < 4.6` means you'd need [GHC 7.4.2 or older](https://wiki.haskell.org/Base_package), which is probably not realistic. – duplode Apr 20 '20 at 18:53
  • I set `resolver: ghc-7.4.2`, and add a mtl candidate, then rebuild it. A new error occurred "No setup information found for ghc-7.4.2 on your platform. This probably means a GHC bindist has not yet been added for OS key 'windows64'. Supported versions: ghc-7.8.4, ghc-7.10.1, ghc-7.10.2, ghc-7.10.3, ..." Does stack have ability to download ghc automatically? – chansey Apr 20 '20 at 20:47
  • I'm sorry to disturb you again. As you said that "Ideally, you'd just install some or all of the replacement libraries and forget about category-extras entirely." What do you mean by "replacement"? I'm not quite understand this word. (e.g. replacement libraries, replacement packages). Could you explain it further? Thanks. – chansey Apr 20 '20 at 20:48
  • 1
    @chansey (1) Stack does download GHC automatically. It seems, however, [there are no 64-bit Windows binaries available for GHC 7.4.2 from haskell.org](https://downloads.haskell.org/ghc/7.4.2/), and so Stack fails to do that in your case. (2) By "replacement", I meant the libraries that now provide (some of) what used to be in `category-extras`. For your hylomorphisms, that means `recursion-schemes`, but there are also `comonads`, `adjunctions`, `kan-extensions`, and many others, which you can install separately as need be (as opposed to getting everything from a single gigantic library). – duplode Apr 20 '20 at 20:58
  • It seems that there is no 64 bit windows binaries before GHC 7.4.2. Can I setup stack to use 32 bit? Or must change OS, if I really want to use category-extras. – chansey Apr 20 '20 at 21:35
  • 1
    @chansey [There is an `arch` option in `stack.yaml`](https://docs.haskellstack.org/en/stable/yaml_configuration/#archos) that might do what you want, though I have never tried it myself. – duplode Apr 20 '20 at 21:41
  • I found there is a "ghc-7.4.2-i386-windows.exe" in [downloads.haskell.org](https://downloads.haskell.org/ghc/7.4.2/). I added a setup `arch: i386` to `stack.yaml`. It prompt that "No setup information found for ghc-7.4.2 on your platform. This probably means a GHC bindist has not yet been added for OS key 'windows32'." Does this mean that `windows32` does not related to `ghc-7.4.2-i386-windows.exe`? – chansey Apr 21 '20 at 07:53
  • BTW, I also noticed that there is prompt when I build project: "Stack will almost certainly fail with GHC below version 7.8, requested 7.4.2". Perhaps stack does not support the old version very well. – chansey Apr 21 '20 at 07:58
  • @chansey Yup, that does seem to be the case (see also [Stack issue #648](https://github.com/commercialhaskell/stack/issues/648)). At this point, I guess the best option would be installing 7.4.2 without Stack on a VM. I'll remove the final instructions from the answer. Thanks for following through! – duplode Apr 21 '20 at 12:26