Установленные Cabal модули не будут импортироваться

Здесь есть несколько вещей, которые меня смущают, поэтому я постараюсь объяснить каждую из них как можно яснее.

Я пытался установить diagrams пакет для haskell, используя клику. Я видел, что он предложил устанавливать пакеты, используя песочницы, вот что я и сделал. Что-то, что мне не понятно, это именно то, что песочница - я понимаю, что я могу инициализировать один с cabal sandbox init и установить пакеты внутри него с cabal install, но я не вижу, как использовать эти пакеты после их установки.

Затем я попытался скомпилировать тестовый скрипт с использованием ghc, что привело к следующей ошибке:

diagramstutorial.lhs:3:10:
    Could not find module 'Diagrams.Prelude'
    Use -v to see a list of the files searched for.

С похожей ошибкой для другого модуля, который должен был загрузить скрипт. Эти модули определенно включены в пакет диаграмм, и Cabal, кажется, рад, что пакет установлен правильно. Я ожидаю, что есть что-то простое, я просто не понимаю, но я не знаю, что это такое.

2 ответа

Решение

Я набрал ghc --make diagramstutorial.lhs скомпилировать

Это заставит GHC использовать обычную базу данных пакетов пользователя (то есть не изолированную). использование cabal exec -- ghc --make diagramstutorial.lhs вместо этого, чтобы GHC работал в контексте вашей песочницы.

Вы также можете использовать GHCi в песочнице с cabal repl, И, естественно, если / когда вы начнете готовить пакет для клики, все команды клики (cabal buildи т. д.) будет использовать песочницу, если вы находитесь в ее каталоге.

Что-то, что мне не понятно, это именно то, что песочница

Набор пакетов с сопровождающей базой данных, локальной для каталога. За пределами cabal.sandbox.config в конфигурационном файле также есть скрытый каталог .cabal-sandbox, в котором diagrams и другие пакеты, которые вы установили, лежат.

  1. Найдите каталог с песочницей и найдите packages.conf.d файл. Например, /home/user/.cabal-sandbox/x86_64-linux-ghc-7.8.4-packages.conf.d

  2. Повторите ваши команды GHC с помощью package-db флаг:

    ghci -package-db /home/user/.cabal-sandbox/x86_64-linux-ghc-7.8.4-packages.conf.d --make diagramstutorial.lhs

Теперь все должно работать

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