Кабала устанавливает приливные окончания с предупреждением

Я пытаюсь установить tidal в командной строке следующим образом:

cabal install tidal

но он заканчивается этим сообщением:

Предупреждение: вы попросили установить исполняемые файлы, но в target: tidal нет исполняемых файлов. Возможно, вы захотите вместо этого использовать --lib для установки библиотек.

Возвращение:

cabal install tidal --lib

is:

Устранение зависимостей ... Актуально

Если я проверю список ghk-pkg, там нет пакета tidal ... Есть ли у кого-нибудь похожая проблема или что я делаю не так?


Моя среда:

  • Windows 10 для образовательных учреждений
  • Haskell 8.4.3
  • Кабал 3.2.0.0
  • Ghc 8.10.1

Спасибо за помощь.


person chararray    schedule 28.04.2020    source источник
comment
Связанный: заголовок stackoverflow.com/questions/61500083/   -  person danidiaz    schedule 29.04.2020


Ответы (2)


Как и Stack в течение более длительного времени, Cabal-install теперь (начиная с версии 3.2) больше не устанавливает библиотеки - в смысле изменения состояния компьютера, чтобы GHC мог получить доступ к библиотеке на нем . Оба инструмента сейчас устанавливают только исполняемые файлы. Раньше это делалось и с библиотеками, но это было остановлено теперь по умолчанию Сборки в стиле Nix.

Теперь (и, на самом деле, уже раньше), способ использования библиотеки - это просто зависеть от нее, и позволить Кабалу за кулисами выяснить, нужно ли ее устанавливать. То есть, вы добавляете .cabal файл в ваш .hs исходный файл с build-depends: tidal в нем. Затем, когда вы скажете cabal install ., он сначала загрузит и установит библиотеку, а затем использует ее для создания собственного исполняемого файла.


Конечно, и Stack, и Cabal, с технической точки зрения, устанавливают библиотеки, но они не глобально регистрируют их. То есть, Cabal знает, где она установила библиотеку, но вы не должны знать об этом. Это в духе непрерывной интеграции: если ваш код теперь строится с определенным состоянием установленных вами библиотек, это не очень надежно. Если он строится только с теми библиотеками, которые явно указаны в файле проекта, шансы на то, что в будущем вы (или кто-то еще) все равно сможете использовать свой код на другом компьютере, не тратя много времени на выяснение того, какие библиотеки установить. первый.

person leftaroundabout    schedule 28.04.2020
comment
Я создал новый каталог и запустил cabal init, добавил tidal в зависимости и запустил cabal new-install .. Там написано LICENSE: openBinaryFile: does not exist (No such file or directory). - person Student; 13.08.2020
comment
@Student либо выберет подходящую лицензию в течение cabal init, для которой он знает, как сгенерировать LICENSE файл, либо добавит его самостоятельно. (Кабалу все равно, что в файле, поэтому с технической точки зрения подойдет пустой файл ... но лучше просто выберите стандартную лицензию.) - person leftaroundabout; 13.08.2020

cabal install --lib tidal не устанавливает двоичные файлы библиотеки в расположение, управляемое ghc-pkg. Бинарные файлы остаются в «магазине» Кабала.

Он создает простой текстовый GHC файл среды пакета, который выбирается при автономных вызовах ghc и ghci, и сообщает им, где искать дополнительные библиотеки.

По умолчанию (как указано в документации ) этот файл среды пакета будет создан в ~/.ghc/$ARCH-$OS-$GHCVER/environments/default и будет выбран вызовами ghc и ghci, сделанными где угодно.

Мы также можем предоставить дополнительный параметр --package-env для создания файла среды в локальной папке, который будет влиять только на вызовы ghc и ghci, сделанные в этой папке. Например:

cabal install --lib --package-env . tidal

Сами проекты cabal игнорируют файлы окружения, поскольку их окружения пакетов создаются из раздела build-depends файла cabal для воспроизводимости. Но файлы окружения полезны тем, что в первую очередь не нужно создавать проект группы, если он вам нужен только для игры с библиотекой в ​​ghci или если вы компилируете простые программы с помощью ghc только.

person danidiaz    schedule 29.04.2020