Скажем, я запускаю cabal install A B C D ... --dry-run
в новой установке GHC (я только что обновил новую версию). Я вижу, что некоторые из зависимостей, которые он хочет получить, не являются последними версиями этих пакетов, например:
utf8-string-0.3.8 (latest: 1)
cairo-0.12.5.3 (latest: 0.13.1.0)
glib-0.12.5.4 (latest: 0.13.1.0)
gio-0.12.5.3 (latest: 0.13.1.0)
pango-0.12.5.3 (latest: 0.13.1.0)
gtk-0.12.5.7 (latest: 0.13.6)
Теперь это часто совершенно нормально (особенно в последнее время после выпуска новой версии GHC). Меня не интересуют конкретные пакеты, перечисленные здесь. Но когда я вижу это, мне нравится быстро проверять, почему Кабал не смог использовать самую последнюю версию этих пакетов. Часто это означает, что одна из вещей, которые я просил установить, не была обновлена и все еще зависит от старых версий, а иногда мне на самом деле не нужно ее устанавливать, и я бы предпочел, чтобы она не перетаскивала версии других пакетов.
Иногда эти «не самые последние версии» очень старые, что обычно означает, что то, о чем я прошу, полностью несовместимо с последними версиями, но было найдено решение с использованием старых версий с очень слабыми ограничениями.
Что я хотел бы сделать, так это выяснить, какой из пакетов, которые я устанавливаю, вызывает это. Обычно я вижу что-то вроде «о, это куча графических пакетов, вероятно, причина в xmonad или taffybar», и я иду проверять последнюю версию xmonad и taffybar на hackage, чтобы узнать, каковы их ограничения на эти пакеты. Но часто «очевидные виновники», подобные этому, на самом деле не имеют соответствующих ограничений на эти зависимости, а это означает, что проблема заключается в каком-то другом пакете, который зависит от того, о чем я просил, и также имеет зависимость от пакеты, последнюю версию которых я не получаю, где этот пакет несовместим с последней версией пакета, о котором сообщает клика. Найти такой пакет (и почему то, что меня действительно волнует, зависит от него) может быть непростой задачей!
Существуют ли какие-либо инструменты или приемы, которые могут помочь ответить на этот вопрос? Я знаю о полезных инструментах зависимости на http://packdeps.haskellers.com/, но, похоже, не делает именно то, что я хочу; Я могу использовать обратный список зависимостей, чтобы начать с пакетов, для которых Кабала хочет получить устаревшую версию, и двигаться вперед, пока не найду что-то знакомое, или я могу запрашивать отдельные пакеты в мониторе зависимостей по одному и работать в обратном направлении, пока не получу найти один из не последних пакетов. Но похоже, что вопрос, который я задаю, должен быть более прямым.
cabal install
и использовать-v
, пытаясь понять сообщения о том, почему решатель не смог найти план? - person Reid Barton   schedule 04.04.2015-v3
, чтобы увидеть полный вывод решателя. Это то, что вы должны сделать, когда вас интересует, почему клика делает что-то странное или неправильное - запустите с-v3
и прочитайте. - person user2407038   schedule 05.04.2015