Как использовать «cabal-dev ghci» с не-песочницей, неглобальным (user?) Пакетом? - PullRequest
8 голосов
/ 15 сентября 2011

Я пробую cabal-dev для проекта, над которым я работаю;проект представляет собой библиотеку, и cabal-dev делает большую работу по созданию его изолированной версии - но у меня возникают проблемы с частью моего рабочего процесса ...

У меня есть скрипт, scratch.hs, который (до cabal-dev) я бы загрузил в ghci для того, чтобы что-то попробовать.Содержание scratch.hs меняется со временем, в зависимости от того, над какой функцией я работаю, конечно.scratch.hs не является частью кодовой базы библиотеки, это всего лишь мое личное пространство, пока я над ним работаю.

Теперь, чтобы получить сеанс ghci с загруженной песочницей, я могу простоcabal-dev ghci, а затем загрузите scratch.hs в это.Проблема в том, что это (по замыслу и разумно) исключает мою базу данных пользовательских пакетов, поэтому, если scratch.hs ссылается на модули из пакетов, которых нет в моей библиотеке build-depends (что не является неразумным - это не часть библиотеки после того, каквсе), эти пакеты не видны, и поэтому я получаю сообщение об ошибке, например:

scripts/scratch.hs:8:8:
    Could not find module `Data.Aeson.Generic':
      It is a member of the hidden package `aeson-0.3.2.11'.
      Perhaps you need to add `aeson' to the build-depends in your .cabal file.
      Use -v to see a list of the files searched for.
Failed, modules loaded: none.

, где в этом случае scratch.hs хочет импортировать Data.Aeson.Generic, но aeson не находится вbuild-depends моей библиотеки (вполне правильно), но - это в моей базе данных пакетов пользователя.

Так как я могу обойти это?Я могу представить ответы в любой из этих категорий, но, возможно, есть категории, которые я пропустил:

  1. Способ (выборочно) использовать пакеты из моей базы данных пользовательских пакетов в сочетании с песочницейсозданный cabal-dev.(Возможно, мой собственный сценарий в стиле cabal-dev ghci?)

  2. Предложение о том, как улучшить мой рабочий процесс, чтобы проблема просто исчезла.

Я знаю, что мог бы просто установить пакет глобально, но я не хотел бы таким образом загрязнять мою глобальную базу данных пакетов (и cabal-dev явно препятствует этому).

Большое спасибо за все советы.

1 Ответ

8 голосов
/ 19 сентября 2011

Я думаю, что самое простое решение - просто установить нужные вещи в песочницу. Например, если вам нужен aeson для вашего интерактивного скрипта:

~/myproject$ cabal-dev install aeson
~/myproject$ cabal-dev ghci

Тогда :set -package aeson должно работать в ghci.

Если это неадекватно, у вас есть много зависимостей, которые вы хотите использовать из своей базы данных пакетов пользователя, и вам не нужно вызывать ghci с другими флагами, установленными вашим кабальным файлом для вызова ghc затем вы можете вызвать не 1015 * без песочницы с доступом к пакетам из песочницы, а также к вашим пользовательским и глобальным пакетам. Например (для GHC 7.0.3):

~/myproject$ GHC_PACKAGE_PATH=./cabal-dev/packages-7.0.3: ghci

(Обратите внимание на двоеточие в конце GHC_PACKAGE_PATH и пробел между ним и ghci.)

...