Невозможно собрать пакет Cabal из-за неоднозначного Prelude

Я пытался установить конвертер BNF из Кабала, однако при его создании возникла проблема. Судя по всему, в этом пакете используется смесь модулей от haskell98 и версии 4. * base. Это представляет проблему в том, что если вы компилируете со скрытым haskell98, некоторые модули не будут найдены. Однако, если вы компилируете с выставленным haskell98, то ghc не может сказать, должен ли он использовать новый Prelude или haskell98 Prelude!

Сообщение об ошибке:

Main.hs:1:1:
    Ambiguous module name `Prelude':
    it was found in multiple packages: base haskell98-2.0.0.1 

Как вы устраняете подобные ошибки?


person keiter    schedule 28.03.2012    source источник


Ответы (2)


Приставать к сопровождающим, чтобы они загрузили исправление. Или, если они не отвечают, подумайте о том, чтобы взять на себя техническое обслуживание самостоятельно.

Это связано с тем, что haskell98 - это пакет совместимости, который дублирует функции других модулей. Новый код не должен зависеть от него, если только он не предназначен для совместимости с Haskell-98. Однако это изменение относительно недавнее, и многие старые коды ссылаются как на «base», так и на «haskell98», хотя на самом деле он не использует пакет «haskell98».

В ближайшее время я бы запустил cabal unpack BNFC, затем отредактировал файл «.cabal» и удалил ссылку на haskell98 из поля «build-depends:». Я бы также увеличил номер версии для библиотеки (этот шаг не имеет значения для исполняемых файлов). Затем выполните сборку и установку из локальной копии, которую вы только что отредактировали. Могут возникнуть и другие проблемы, если BNFC должен был использовать mtl версии 1, но при необходимости вы можете добавить это ограничение самостоятельно.

person John L    schedule 28.03.2012

Обходной путь - использование языковых расширений NoImplicitPrelude и PackageImports. прежний не позволяет Haskell импорт одной из прелюдий, которая не удалась. второе расширение позволяет укажите пакет и версию, из которой следует импортировать модуль:

импорт "базовой" прелюдии

or

импорт "haskell98" Prelude

person MauganRa    schedule 28.05.2018