Использование списка ghc-pkg и списка cabal - при установке дают разные списки

Я пытаюсь загрузить мой файл.hs, но когда я import Data.Numbers.CReal, это дает мне ошибку Failed to load interface for 'Data.Numbers.CReal', Я побежал cabal install numbers и если я cabal list --installed номер pkg появляется, но если я ghc-pkg list это не (также если я ghc-pkg checkэто дает много предупреждений о пикше). Это связано с моим не загружаемым файлом? Как я могу решить это?

Ps. Я знаю, как импортировать пакеты, но я не уверен, правильно ли я импортирую эти пакеты.

Спасибо и извините, если я не объяснил себя правильно.

2 ответа

На ум приходят две гипотезы:

  1. cabal выбирает другую версию ghc и его обслуживающий инструментарий, чем ваша оболочка. Вы можете проверить это несоответствие, выполнив эти две команды:

    cabal exec -- ghc --version
    ghc --version
    

    Они говорят то же самое? Если это так, отвергнуть эту гипотезу. В противном случае вам следует решить, нравится ли вам выбор оболочки или выбор клики (я рекомендую предпочесть выбор вашей оболочки).

    Если хочешь cabalВыбор лучше, вы можете использовать конкретную версию GHC (и другие инструменты GHC), добавив -<version> в команду; например, попробуйте ghc-pkg-7.10.3 list чтобы увидеть, что находится в базе данных пакета для версии 7.10.3, или ghci-7.10.3 запустить конкретную версию REPL. Вы можете сделать эти изменения постоянными, добавив символические ссылки или аналогичные вашим PATH,

    Если вам больше нравится выбор вашей оболочки, вы можете спросить cabal использовать эту версию с cabal configure -w ghc; или если вы беспокоитесь, что cabal и ваша оболочка разрешится ghc иначе, вы могли бы попросить конкретную версию с cabal configure -w ghc-7.10.3 или похожие.

  2. Ваша оболочка согласна с cabal о том, какую версию GHC использовать, но вы находитесь в песочнице клики. cabal list --installed говорит вам, что установлено в песочнице, но ghc-pkg list рассказывает, что установлено в вашей базе данных пользовательских пакетов. Вы можете проверить наличие расхождений между этими двумя командами:

    cabal exec -- ghc-pkg list numbers
    ghc-pkg list numbers
    

    (Если у вас новичок, не знаю, в какой версии он появился, вы также можете попробовать cabal hc-pkg list вместо cabal exec -- ghc-pkg list, Это, вероятно, будет более совместимым способом, поэтому хорошая привычка для развития.)

    Если они печатают одни и те же вещи, отвергните эту гипотезу. В противном случае вы должны решить, хотите ли вы продолжать использовать песочницу или нет (я рекомендую продолжать использовать песочницу).

    Если вы хотите прекратить использование песочницы, вы можете передать --ignore-sandbox в cabal, Чтобы сделать это постоянным, посмотрите в cabal.sandbox.config файл, который будет содержать указатель на настоящую песочницу (обычно .cabal.sandbox). Удалите как конфиг, так и песочницу. Вы также можете глобально игнорировать песочницы, добавив ignore-sandbox: True на ваш ~/.cabal/config, но я настоятельно рекомендую против этого.

    Если вы хотите сохранить песочницу, вам нужно будет использовать cabal exec для всех ваших инструментов GHC необходимо убедиться, что выбрана правильная база данных пакетов. Например, попробуйте cabal exec ghci запустить REPL с доступом к базе данных пакета песочницы.

Эти гипотезы не являются взаимоисключающими: могут произойти оба. В этом случае я настоятельно рекомендую выбрать окончательное решение ("использовать cabal exec для всех исполнений GHC toolsuite "), поскольку он прозрачно решает обе проблемы: стандартные команды GHC toolsuite будут переписаны для ссылки на явно версионные (например, cabal exec ghc будет на самом деле выполнить ghc-7.10.3) и среда будет настроена так, чтобы указывать на правильную базу данных пакетов.

Ответ на это

Вы можете проверить это несоответствие, выполнив эти две команды:

Кабал Exec - GHC - версия GHC - версия

Они говорят то же самое?

было да. Я не помню второй вариант, но мне удалось решить его самостоятельно. Что конкретно я сделал:

  1. выполните команду "rm -rf .cabal" (без запятых), чтобы удалить конфигурацию cabal.
  2. запустите "rm -rf .cabal-sandbox"
  3. запустить "rm -rf .ghc"
  4. Кабал новоиспеченный Кабал (не уверен, помогло это или нет)
  5. В режиме администратора (sudo) я отредактировал конфигурационный файл cabal и изменил Ignore Sandbox на True -> это вызовет у меня проблемы в будущем? я должен изменить его обратно на ложь? ответьте, пожалуйста
  6. Пришлось удалить cabal.sandbox.config, который доставлял некоторые проблемы
  7. Кабал установить Кабал установить
  8. Кабала обновление

Теперь команда ghc-pkg list и список cabal --installed показывают оба мои установленные пакеты, и они работают без проблем.

Ps. Я дал подробную информацию о процессе на случай, если кому-то понадобится в будущем. Все еще не уверен, что послужило причиной того, что клика и ghc не показали одинаковые pkgs.

Другие вопросы по тегам