Как и Stack в течение более длительного времени, Cabal-install теперь (по состоянию на 3.2) на самом деле не устанавливает библиотеки больше - в смысле изменения состояния компьютера, чтобы GH C мог получить доступ к библиотека на нем † . Оба инструмента теперь устанавливают только исполняемые файлы . Раньше это делалось также и для библиотек, но это было остановлено с текущими по умолчанию сборками в стиле Nix .
Теперь (и, на самом деле, уже ранее), способом использования вместо этого библиотека просто зависит от нее, и пусть Cabal выяснит, не нужно ли ее устанавливать. То есть вы добавляете файл .cabal
в исходный файл .hs
с build-depends: tidal
. Затем, когда вы скажете cabal install .
, она сначала загрузит и установит библиотеку, а затем использует ее для создания собственного исполняемого файла.
† Конечно, и стек, и Cabal с технической точки зрения устанавливает библиотеки, просто они глобально не регистрируют их. То есть, Кабал знает, где он установил библиотеку, но вы не должны знать об этом. Это в духе непрерывной интеграции : если ваш код собирается сейчас с конкретным состоянием установленных библиотек, это не очень надежно. Если он собирается только с теми библиотеками, которые явно указаны в файле проекта, шансы намного выше, чем в будущем - вы (или кто-то еще) все еще сможете использовать ваш код на другом компьютере, не тратя часы на выяснение, какие библиотеки устанавливать первый.