Могу ли я поставить собственную ссылку на пакет в stack.yaml? - PullRequest
3 голосов
/ 21 апреля 2020

Чтобы напечатать довольно вертикальное дерево, я искал в Google и нашел пакет pretty-tree .

Я хочу импортировать этот пакет, но проблема в следующем:

Кажется, что Stackage LTS не включает этот пакет.

Поэтому, когда я добавляю pretty-tree к package.yaml и stack build, он подсказывает, что

In the dependencies for quick-sort-0.1.0.0:
    pretty-tree needed, but the stack configuration has no specified version  (latest matching version is 0.1.0.0)
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:

- pretty-tree-0.1.0.0@sha256:49b0e17008f9d30328db2bcc2958f3a7b78d154d2335c2dbaa2073e237b524ae,668

я добавляю эта редакция stack.yaml:

extra-deps:
  - pretty-tree-0.1.0.0@sha256:49b0e17008f9d30328db2bcc2958f3a7b78d154d2335c2dbaa2073e237b524ae,668

Эта проблема решена, и я могу ее успешно выполнить.

Вопрос:

  1. Что такое pretty-tree-0.1.0.0@sha256:49b0e17008f9d30328db2bcc2958f3a7b78d154d2335c2dbaa2073e237b524ae, 688, откуда это?

    В документе стека сказано, что

    extra-deps

    В этом поле можно указать дополнительные зависимости от вершина того, что определено в вашем снимке (указан в поле разрешения, упомянутом выше). Эти зависимости могут исходить либо от локального пути к файлу, либо от местоположения пакета Pantry.

    Для случая локального пути к файлу применяются те же правила относительного пути, которые применяются к пакетам.

    Расположение пакетов кладовой позволяет Вы должны включить зависимости из трех различных типов источников:

    Hackage

    Архивы (архивные или ZIP-файлы, локальные или по HTTP (S))

    Git или Mercurial репозитории

    Но я не знаю, что такое кладовая ...

  2. Есть еще один способ решить эту проблему. То есть

    1. Загрузите файл pretty-tree-0.1.0.0.tar.gz из https://hackage.haskell.org/package/pretty-tree
    2. и распакуйте его в папку моего проекта.
    3. Добавить pretty-tree-0.1.0.0 к stack.yaml
    packages:
    - .
    - pretty-tree-0.1.0.0
    

    Этот метод также может решить проблему, но мой вопрос:

    Могу ли я добавить эту ссылку https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz к stack.yaml напрямую? Например:

    extra-deps: 
      - url: https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz
    

    Я пробую, стек подсказывает ошибку:

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
boxes               > using precompiled package
contravariant       > using precompiled package
distributive        > using precompiled package
th-abstraction      > using precompiled package
transformers-compat > using precompiled package
unordered-containers> using precompiled package
pretty-tree         > configure
pretty-tree         > Configuring pretty-tree-0.1.0.0...
pretty-tree         > build
pretty-tree         > Preprocessing library for pretty-tree-0.1.0.0..
pretty-tree         > Building library for pretty-tree-0.1.0.0..
pretty-tree         > [1 of 1] Compiling Data.Tree.Pretty
pretty-tree         > copy/register
pretty-tree         > Installing library in C:\sr\snapshots\34184208\lib\x86_64-windows-ghc-8.8.3\pretty-tree-0.1.0.0-KT
aQApPwVahHd2AQwQQQSA
pretty-tree         > Registering library for pretty-tree-0.1.0.0..
Received ExitFailure 1 when running
Raw command: "C:\\Users\\Chansey\\AppData\\Local\\Programs\\stack\\x86_64-windows\\ghc-8.8.3\\bin\\ghc-pkg.exe" --user -
-no-user-package-db --package-db "C:\\sr\\snapshots\\34184208\\pkgdb" describe --simple-output distributive --expand-pkg
root
Standard error:

ghc-pkg.exe: C:\sr\snapshots\34184208\pkgdb\th-abstraction-0.3.2.0-D5zRQZUNFcq6kU1WHIrSvs.conf: getModificationTime:Crea
teFile "\\\\?\\C:\\sr\\snapshots\\34184208\\pkgdb\\th-abstraction-0.3.2.0-D5zRQZUNFcq6kU1WHIrSvs.conf": does not exist (
The system cannot find the file specified.)

Progress 7/15

Извините, так как я не очень знаком с экосистемой Haskell Этот вопрос может быть глупым.

Спасибо.


Отредактировано:

Я обнаружил, что если я сначала использую

extra-deps:
  - pretty-tree-0.1.0.0@sha256:49b0e17008f9d30328db2bcc2958f3a7b78d154d2335c2dbaa2073e237b524ae,668

, а затем откат на

  extra-deps: 
    - url: https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz

Ошибка исчезла, но я не знаю почему ...

1 Ответ

3 голосов
/ 21 апреля 2020
  1. Что такое pretty-tree-0.1.0.0@sha256:49b0e17008f9d30328db2bcc2958f3a7b78d154d2335c2dbaa2073e237b524ae, 688, откуда?

Эта длинная строка текста, которую вы включили, является описанием версии пакета. pretty-tree - это имя пакета, 0.1.0.0 - это версия, которую вы используете, 49b0e17008f9d30328db2bcc2958f3a7b78d154d2335c2dbaa2073e237b524ae - это SHA256 га sh файла Cabal пакета, а 688 - размер файла Cabal. (Источник: https://docs.haskellstack.org/en/stable/pantry/) На самом деле вам нужно только включить бит pretty-tree-0.1.0.0; в остальном нет необходимости, но если вы включите его, Stack использует его в целях проверки, чтобы обеспечить воспроизводимость вашей сборки, проверяя, чтобы она всегда загружала один и тот же пакет каждый раз.

Но Я не знаю, что такое Pantry ...

Pantry - это просто внутренний компонент, который Stack использует для определения версий стека. Вам не нужно знать, что такое кладовая или как она работает, чтобы использовать стек, но если вам интересно, вы можете обратиться к https://docs.haskellstack.org/en/stable/pantry/ для получения дополнительной информации.

Есть еще один способ решить эту проблему ... Скачать pretty-tree-0.1.0.0.tar.gz

Я понятия не имею, почему вы захотите сделать это: это в значительной степени именно то, что Stack делает для установки пакета, но если вы сделаете это вручную, у вас будет гораздо больше шансов испортить его.

Могу ли я добавить эту ссылку https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz непосредственно в stack.yaml?

Снова Я не совсем, почему вы хотели бы сделать это, так как Stack загружает пакет из этого места в любом случае, когда вы указываете pretty-tree-0.1.0.0. Но неожиданно получается, что вы действительно можете сделать это, если действительно этого хотите! Используя документацию для extra-deps, кажется, что вы можете сделать следующее:

extra-deps:
- url: https://hackage.haskell.org/package/pretty-tree-0.1.0.0/pretty-tree-0.1.0.0.tar.gz

(Не проверено, но это должно работать. Если это не так, возможно, вам потребуется добавьте раздел subdirs:, согласно связанной документации.)

...