Ответ 1
Современный способ сделать это - использовать Stack. Измените stack.yaml
, чтобы включить
flags:
transformers-compat:
transformers3: true
См. также раздел flags.
Недавно я столкнулся с проблемой "cabal hell", которую мне удалось решить, вручную установив transformers-compat
с флагом -f transformers3
в моей изолированной песочнице cabal до запуск cabal install
для моего проекта.
Можно ли указать в моем приложении .cabal
файл, который зависит от библиотеки, чтобы он был построен с определенным флагом сборки?
Современный способ сделать это - использовать Stack. Измените stack.yaml
, чтобы включить
flags:
transformers-compat:
transformers3: true
См. также раздел flags.
[Скопировано из раздела комментариев.]
Похоже, что невозможно указать такую зависимость через поле build-depends
в вашем файле .cabal
. buildDepends
определяется как [Dependency]
, где data Dependency = Dependency PackageName VersionRange
. Однако вы можете использовать cabal install --constraint="transformers-compat +transformers3"
.
Глядя на файл transformers-compat.cabal
, я думаю, что решатель должен иметь возможность определить правильное назначение флага, если вы соответствующим образом ограничиваете свою зависимость от transformers
. Например. build-depends: transformers >= 0.3 && < 0.4
должен заставить решателя выбрать transformers-compat +transformers3
. Если это не сработает, это может быть ошибкой в решателе.
Кроме того, вызов любой технической проблемы с Cabal "Cabal hell" не очень информативен. Было бы проще помочь вам, если бы вы описали, какое сообщение об ошибке вы получали.
Я также долгое время пытался найти решение этой проблемы. Я просто нашел его! Вы должны изменить глобальный конфигурационный файл cabal на ~/.cabal/config. Добавьте строку, подобную этой, в начальный раздел файла:
ограничения: hmatrix + openblas
Это позволяет использовать флаг openblas для пакета hmatrix. Он будет автоматически использован в следующий раз, когда пакет будет установлен. Если есть способ установить такой флаг локально для песочницы, я не смог его найти.
Существует несколько способов ограничить версию для установки.
Добавьте нижнюю и верхнюю границы в версии пакета в файле cabal, например Mikhail, пример такого файла здесь
Кроме того, вы можете переопределить параметры в файле .cabal с флагом cabal install --constraint="bar-2.1"
Чтобы удалить определенную версию пакета:
cabal sandbox hc-pkg unregister bar-2.1
ghc-pkg unregister bar-2.1