Можно ли отследить цепочку импорта, которая приводит к определенному идентификатору? - PullRequest
2 голосов
/ 02 октября 2019

Пакет Haskell (назовем его package A ) перестал компилироваться для меня из-за обновленных зависимостей с ошибкой о неопределенной переменной. У меня есть доступ к старой среде зависимостей, где все тот же код выполняет компиляцию, поэтому я могу открыть модуль в GHCi и использовать :info, чтобы отследить, откуда он исходил, что приводит меня кпакет B .

Проблема в том, что сломанный модуль в A не напрямую импортирует модуль из B определение этого пропущенного идентификатора;должно быть, он получал его через другой импорт, который реэкспортировал его. Но ни A , ни B не изменились вообще между двумя средами. Таким образом, это означает, что модуль в некотором третьем пакете C должен был предварительно импортировать и повторно экспортировать мой идентификатор из B , чтобы затем импортировать (возможно, черездальнейший реэкспорт) сломанным модулем в A , и C изменился между двумя средами, чтобы больше не реэкспортировать идентификатор.

Есть ли некоторыеКак я могу попросить GHC или Cabal в рабочей среде о полной цепочке импорта, которая приводит к тому, что идентификатор находится в области действия, чтобы я мог идентифицировать пакет C ? В противном случае я не знаю, как сузить причину проблемы, не просматривая вручную все (переходные) зависимости A , которые могли бы правдоподобно импортировать что-то из B .

1 Ответ

6 голосов
/ 02 октября 2019

Я не знаю, как запросить всю цепочку, но вы можете использовать -ddump-minimal-imports, чтобы запросить первый шаг в цепочке, а затем выполнить итерацию.

...