Я рекомендую cabal-dev , который поддерживает отдельный набор установленных пакетов для каждого проекта, над которым вы работаете.Это не решает плохое поведение установки cabal в целом, но означает, что такие сбои более изолированы, чем они могли бы быть, и позволяет вам легче их исправить, просто выполнив cabal-dev clean && cabal-dev install
.
Дополнительное преимущество воспроизводимых сборок также приятно.
По общему признанию, это не обходной путь для вашей конкретной проблемы, но он уменьшает боль при установке кабала в целом.
Построение наОтвет Даниэля Фишера, вот оболочка для cabal
, которая прерывает установку, если она переустанавливает пакет:
cabal () {
if [ "$1" = "install" ]; then
local out=$(command cabal --dry-run -v2 "$@" 2>&1)
if echo "$out" | egrep -c '\((reinstall|new version)\)' >/dev/null; then
echo "$out"
return 1
fi
fi
command cabal "$@"
}
YMMV;Я только слегка проверил это, и это вызывает досадную задержку при запуске, так как все зависимости должны быть рассчитаны дважды.Но это должно облегчить утомление, если вы хотите остаться в безопасности.