2014-04-16 4 views
4

ТЛ; др: установлена ​​библиотека с Кабалами песочницей, GHCi все еще жалуется, что библиотека отсутствуетУстановленные парсеки в песочнице, но не могут найти библиотеки при попытке загрузить файл в GHCI

У меня есть каталог, в котором Я разрабатываю материал Хаскелла. Это хорошо работает на другом компьютере с ghc 7.6, но теперь, когда я работаю на другом компьютере с ghc 7.8.2 (я не знаю, будет ли версия иметь значение), я получаю такие ошибки:

Prelude>: л Interpreter.hs

Parser.hs: 9: 8: не удалось найти модуль 'Text.ParserCombinators.Parsec' Возможно, вы имели в виду Text.ParserCombinators.ReadPrec (из базы) текста. ParserCombinators.ReadP (от базы) Используйте -v, чтобы просмотреть список файлов, которые искали.

при попытке загрузить файлы из ghci. Эти файлы находятся в BASE/src/Lib, где BASE - это каталог с LIB.cabal и все такое. Поэтому я подумал, что есть что-то с кабалой. Желая избежать ужасного «адского адского», я сделал в проекте песочницу (cabal sandbox init), которую я раньше не использовал. Затем я вручную удалил другой материал, связанный с кабалом, и сделал cabal init. Я сделал cabal install --dependencies-only, но на самом деле ничего не установил (я угадываю из-за -dependencies-only? Я был слишком параноидален для глобальных установок, чтобы использовать обычную установку cabal). Так что я пытался добавить вещи вручную в мой .cabal файл (это то, как вы должны сделать это?), А именно:

накопление зависит:

база> = 4,7 & & < 4,8,

containers >=0.5 && <0.6, 

-- 

parsec == 3.1.* -- THIS is the line I added 

Теперь я сделал cabal install --dependencies-only. И вот, все на самом деле были установлены, в частности:

[21 25] Compiling Text.Parsec (Текст/Parsec.hs, Dist/DIST-песочнице-a2fe5095/построить /Text/Parsec.o)

...

в месте регистрации парсек-3.1.5 ... Установка библиотеки в/дома/PATHTODIR/Stack Lang/.cabal-песочнице/библиотека/x86_64-линукс-GHC-7,8 .2/parsec-3.1.5 Регистрация parsec-3.1.5 ... Установленный parsec-3.1.5

Итак, я попытался загрузить тот же файл в ghci, получив ту же ошибку. Обратите внимание, что проблема была в Text.ParserCombinators.Parsec, который, казалось, был установлен просто отлично, когда я запустил cabal install --dependencies-only. Вот вывод, что я получаю с ghc -v Interpreter.hs:

Glasgow Haskell Compiler, версия 7.8.2, этап 2 загружалось по GHC версии 7.4.1

Использование бинарной базы данных пакетов: /opt/ghc/7.8. 2/Библиотека/GHC-7.8.2/package.conf.d/пакет.Кэш

проводного в пакете GHC-прима сопоставляется с GHC-примой-0.3.1.0-948744e1f99cc8bcc7c7d3ba60c7c2d8

проводного в пакете целочисленных-ГМФА сопоставляются с целочисленными-ГМФ-0.5.1.0-dc47f6b546fc171f67a7f7d311684a99

проводными -в базового пакета отображается на базу-4.7.0.0-018311399e3b6350d5be3a16b144df9b

проволоки в пакете RTS, отображенный на builtin_rts

проводного в пакете шаблоны Haskell преобразуются в шаблон-Haskell-2.9.0.0-

dcc8c210fb02937e104bc1784d7b0f06

проводной в пакет DPH-сл не найден.

проводной пакет dph-par не найден.

HSC статические флаги:

проводной в пакете GHC-прима, отображенные GHC-приму-0.3.1.0-948744e1f99cc8bcc7c7d3ba60c7c2d8

проводного в пакете целочисленных-ГМФА сопоставляются с целочисленной-ГМФ-0.5.1.0 -

dc47f6b546fc171f67a7f7d311684a99

проводной в базовый пакет отображается базировать-4.7.0.0-018311399e3b6350d5be3a16b144df9b

проволокой в ​​пакет ртс отображенные builtin_rts

проводной в пакет шаблонов Haskell сопоставляется с шаблоном-Haskell-2.9.0.0-

dcc8c210fb02937e104bc1784d7b0f06

проводной в пакет DPH-сл не найден.

проводной пакет dph-par не найден.

* Погоня зависимостей:

Погоня модули из: * Interpreter.hs

Parser.hs: 9: 8: Не удалось найти модуль 'Text.ParserCombinators.Parsec' Возможно, вы имели в виду Text.ParserCombinators.ReadPrec (от основания) Text.ParserCombinators.ReadP (от основания) МЕСТОПОЛОЖЕНИЕ поиск: Текст/ParserCombinators/Parsec.hs Текст/ParserCombinators/Parsec.lhs

Parser.hs: 10: 18: Не удалось найти модуль '' Text.Parsec.Token Locations Поиск: Текст/Парсек/Token.hs Текст/Парсек/Token.lhs

переводчик. вс: 11: 8: не удалось найти модуль 'Control.Monad.Error' Возможно, вы имели в виду Control.Monad.Fix (от основания) Control.Monad.ST (от основания) Control.Monad.Zip (от основания) МЕСТОПОЛОЖЕНИЕ Поиск: Control/монада/Error.hs Control/монада/Error.lhs

Interpreter.hs: 15: 8: Не удалось найти модуль «Text.ParserCombinators.Parsec.Error ' Места искали: Текст/ParserCombinators/Парсек/Error.hs Текст/ParserCombinators/Парсек/Error.lhs * Удаление временных файлов: Удаление: * Удаление временных директорий: Удаление:

ответ

11

ghc/ghci не знают о песочницах. По умолчанию они смотрят только на глобальные и пользовательские базы данных.

Либо используйте cabal repl для запуска ghci, либо следуйте рецептам из моей статьи cabal sandbox tips. Оба могут потребовать недавнюю (после 1.18) кабала.

+3

Отлично, я добрался до cabal v. 1.19, и теперь все работает хорошо. Кстати, я не нашел упоминания о ghc, игнорируя песочницы; в документации, по-видимому, сосредоточено основное внимание на том, как создавать библиотеку с помощью песочниц, а не как разрабатывать с помощью песочницы. Здесь что-то не хватает? – Guildenstern

+0

Вы можете разрабатывать без непосредственного вызова ghc: cabal repl, cabal build и т. Д. –

Смежные вопросы