Не може да се изгради заклинателен пакет поради двусмислен Prelude

Опитвам се да инсталирам BNF конвертор от cabal, но има проблем при изграждането му. Очевидно този пакет използва комбинация от модули от haskell98 и версия 4.* на базата. Това представлява проблем, тъй като ако компилирате със скрит 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 от импортиране на една от прелюдиите, което ще се провали. второто разширение позволява на посочете пакета и версията, от която да импортирате модул:

импортиране на "база" Prelude

or

импортиране на "haskell98" Prelude

person MauganRa    schedule 28.05.2018