Из-за неоднозначной прелюдии не может собрать кабалку - PullRequest
4 голосов
/ 28 марта 2012

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 28 марта 2012

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

Это потому, что haskell98 - это пакет совместимости, который дублирует функции в других модулях.Новый код не должен зависеть от него, если только он не предназначен для совместимости с Haskell-98.Однако это изменение является относительно недавним, и многие старые коды ссылаются как на «base», так и на «haskell98», хотя на самом деле он не использует пакет «haskell98».1005 *, затем отредактируйте файл ".cabal" и удалите ссылку на haskell98 из поля "build-зависимость:".Я также увеличил бы номер версии для библиотеки (этот шаг не имеет значения для исполняемых файлов).Затем соберите и установите локальную копию, которую вы только что отредактировали.Могут быть и другие проблемы, если BNFC должен был использовать mtl версии 1, но при необходимости вы можете добавить это ограничение самостоятельно.

1 голос
/ 28 мая 2018

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

import "base" Prelude

или

import "haskell98" Prelude

...