требуются дополнительные категории, но в конфигурации стека не указана версия

Я пишу небольшую программу на Haskell, которой нужно импортировать два модуля Control.Functor.Algebra и Control.Morphism.Hylo.

Я искал в гугле. Эти два модуля можно найти в category-extras.

Поэтому я добавил category-extras к package.yaml:

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

Затем вызовите stack build, но произошла ошибка:

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.

Следуя подсказкам, я добавил category-extras-1.0.2@sha256:511a5668e05af6617d94080e866c9a496e0abd7625d961264755614a73b517f1,10259 к extra-deps в stack.yaml:

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

Но все равно не получилось:

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.

Следуя подсказкам, продолжаю добавлять extra-deps в 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

Опять не получилось:

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.

Хорошо, продолжаю добавлять..

  - 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

Теперь произошла новая ошибка:

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))

Кажется, есть какие-то дубликаты пакетов (comonad-transformers и comonads-fd)?

Я удаляю более низкую версию и перестраиваю ее:

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.

Теперь я совсем запутался...

Почему стек не может автоматически разрешать зависимости пакетов?

Кто-нибудь может мне помочь?

Большое спасибо!


person chansey    schedule 20.04.2020    source источник
comment
stack был построен явно, потому что авторы считали, что автоматическое разрешение зависимостей пакетов было большой ошибкой. Это верный ответ, почему. Но есть обходные пути; надеюсь, некоторые люди напишут их некоторые. Или вы можете переключиться на cabal, который включает решение зависимостей; это создает свои собственные проблемы. Это компромисс.   -  person Daniel Wagner    schedule 20.04.2020
comment
@DanielWagner Спасибо, может быть, мне следует переключиться на cabal ... но до этого есть ли способ обойти эту проблему с помощью stack? Я просто хочу импортировать два модуля Control.Functor.Algebra и Control.Morphism.Hylo из category-extras...   -  person chansey    schedule 20.04.2020
comment
category-extras устарел. Это новый проект? Если да, то используйте вместо них recursion-schemes и Data.Functor.Foldable.   -  person Joseph Sible-Reinstate Monica    schedule 20.04.2020
comment
@JosephSible-ReinstateMonica Да, это новый проект (небольшая программа). Я просто использую Algebra, Coalgebra и hylo для реализации быстрой сортировки. Я могу сам написать конструктор и функцию этого типа. Для DRY я нашел эти пакеты от hackage...   -  person chansey    schedule 20.04.2020
comment
Я не говорил писать их самостоятельно. Я сказал использовать recursion-schemes и Data.Functor.Foldable, замену устаревших модулей, которые вы хотите.   -  person Joseph Sible-Reinstate Monica    schedule 20.04.2020


Ответы (1)


Цитирую комментарий:

Да, это новый проект (небольшая программа). Я просто использую алгебру, коалгебру и hylo для реализации быстрой сортировки. Я могу сам написать конструктор и функцию этого типа. Для DRY я нашел эти пакеты от hackage...

Если вам нужен пакет исключительно для этого, просто переключитесь на recursion-schemes, как предлагает Джозеф Сибл, и избавь себя от хлопот. Тем не менее, не помешает сказать кое-что о трудностях установки, которые вы отметили.


category-extras — это очень большая и очень старая библиотека, которая давным-давно была разделена на множество других библиотек. В идеале вы просто установите некоторые или все заменяющие библиотеки и полностью забудете о category-extras. К сожалению, Control.Functor.Algebra не получил официальной замены, согласно списку замен от документы версии 1.02 (в случае Control.Morphism.Hylo по крайней мере часть функций можно получить с помощью recursion-schemes). Это означает, что вы все еще можете использовать category-extras.

В любом случае, одна вещь, которую вы определенно не хотите, - это устанавливать category-extras-1.0.2, самую последнюю версию. Это просто метапакет, который не содержит собственного кода, а просто извлекает большое количество замещающих пакетов. Кроме того, поскольку эта версия выпущена в 2012 году, многие из этих сменных пакетов сами были заменены на данный момент.

Если вам действительно необходимо использовать category-extras, лучше всего придерживаться category-extras-0.53.5.1 (Я ссылаюсь на 0.53.5, потому что документы 0.53.5.1 не отображаются должным образом на Hackage), последняя версия перед разделением. Это зависит от mtl < 2, что раздражает, потому что это очень старая версия пакета, которая используется почти везде. Кроме того, mtl-1.1.1 имеет верхнюю границу base < 4.6. Это означает, что требуется GHC 7.4.2 или более ранняя версия, поэтому установить его со стеком не получится< /а>. ghcup тоже не поможет (самая ранняя версия GHC, которую он поддерживает, — 7.10.3), так что вы d необходимо выполнить автономную установку GHC 7.4.2 либо на виртуальной машине, либо с использованием какой-либо другой стратегии, чтобы отделить ее от вашей обычной версии GHC.

person duplode    schedule 20.04.2020
comment
Спасибо. Я переключаюсь на recursion-schemes, и теперь это работает. За исключением того, что теперь мне нужно определить 2 синонима типа type Algebra f a = f a -> a и type Coalgebra f a = a -> f a, потому что эти два имени алгебры не в recursion-schemes явно. Конечно, это не проблема. - person chansey; 20.04.2020
comment
Но у category-extras все еще есть проблема. Я добавил category-extras-0.53.5.1 и mtl-1.1.1, как вы упомянули, но сборка не удалась. ``` 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, ... ``` - person chansey; 20.04.2020
comment
И эти кандидаты также терпят неудачу (скажем, моя базовая версия не соответствует)... Эти проблемы, возможно, потребуют дальнейшего изучения в будущем. - person chansey; 20.04.2020
comment
@chansey Я упустил из виду, что mtl-1.1.1 имеет верхнюю границу base < 4.6. Хотя привязка была добавлена ​​задним числом через ревизию Hackage, она, предположительно, была добавлена, потому что mtl-1.1.1 не будет правильно строиться с последними GHC. base < 4.6 означает, что вам потребуется GHC 7.4.2 или старше, что, вероятно, нереально. - person duplode; 20.04.2020
comment
Я устанавливаю resolver: ghc-7.4.2 и добавляю кандидата mtl, затем перестраиваю его. Произошла новая ошибка. На вашей платформе не найдена информация о настройке для ghc-7.4.2. Вероятно, это означает, что программа связывания GHC еще не добавлена ​​для ключа ОС «windows64». Поддерживаемые версии: ghc-7.8.4, ghc-7.10.1, ghc-7.10.2, ghc-7.10.3, ... Может ли стек автоматически загружать ghc? - person chansey; 20.04.2020
comment
Извините, что снова беспокою вас. Как вы сказали, в идеале вы должны просто установить некоторые или все заменяющие библиотеки и полностью забыть о дополнительных категориях. Что вы имеете в виду под заменой? Я не совсем понимаю это слово. (например, замена библиотек, замена пакетов). Не могли бы вы объяснить это дальше? Спасибо. - person chansey; 20.04.2020
comment
@chansey (1) Стек загружает GHC автоматически. Однако, похоже, что для GHC 7.4.2 нет 64-битных двоичных файлов Windows от haskell. .org, поэтому Stack не может этого сделать в вашем случае. (2) Под заменой я имел в виду библиотеки, которые теперь предоставляют (некоторые из них) то, что раньше было в category-extras. Для ваших гиломорфизмов это означает recursion-schemes, но есть также comonads, adjunctions, kan-extensions и многие другие, которые вы можете установить отдельно по мере необходимости (в отличие от получения всего из одной гигантской библиотеки). - person duplode; 20.04.2020
comment
Кажется, что до GHC 7.4.2 не было 64-битных двоичных файлов Windows. Могу ли я настроить стек для использования 32 бит? Или должен изменить ОС, если я действительно хочу использовать дополнительные категории. - person chansey; 21.04.2020
comment
@chansey В stack.yaml есть опция arch, которая может делать то, что вы хотите , хотя сам никогда не пробовал. - person duplode; 21.04.2020
comment
Кстати, я также заметил, что при сборке проекта появляется подсказка: стек почти наверняка выйдет из строя с GHC ниже версии 7.8, запрошенной 7.4.2. Возможно стек не очень хорошо поддерживает старую версию. - person chansey; 21.04.2020
comment
@chansey Да, похоже, это так (см. также проблема стека #648 ). На данный момент, я думаю, лучшим вариантом будет установка 7.4.2 без стека на виртуальной машине. Я удалю последние инструкции из ответа. Спасибо, что дошли до конца! - person duplode; 21.04.2020