Haskell - Модуль не найден (скрытый пакет)
Я недавно установил платформу Haskell для Windows для своего класса программирования. Он включает в себя GHCi в качестве компилятора и Cabal в качестве системы упаковки. Я пытался установить пакет Craft3e с Cabal, так как этот пакет упражнений использует мой учебник, но безрезультатно. Чтобы установить Craft3e, я просто ввожу cabal unpack Craft3e
в командной строке, которая создает каталог "\Craft3e-0.1.0.8". После входа в каталог я печатаю cabal install --disable-documentation
, который дает мне следующее сообщение:
Resolving dependencies...
In order, the following would be installed:
time-1.2.0.5 (new version)
random-1.0.1.1 (reinstall) changes: time-1.4 -> 1.2.0.5
QuickCheck-2.5.1.1 (reinstall)
Craft3e-0.1.0.8 (new package)
cabal: The following packages are likely to be broken b
haskell-platform-2012.4.0.0
Use --force-reinstalls if you want to install anyway.
После использования cabal install --disable-documentation --force-reinstalls
, установите как ожидалось. Я загружаю модуль, чтобы проверить это: ghci PicturesSVG
, Это успешно загружается. Однако, как только я выйду из компилятора GHCi и вернусь к нему, я больше не могу загружать модули из пакетов Craft3e; вместо этого я получаю сообщение:
GHCi, version 7.4.2: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
<command line>:
Could not find module `PicturesSVG'
it is a hidden module in the package `Craft3e-0.1.0.8'
Use -v to see a list of the files searched for.
Failed, modules loaded: none.
Что случилось? Пакет все еще отображается, когда я вхожу ghc-pkg list
, Я пытался войти ghc-pkg expose Craft3e-0.1.0.8
, но подсказка говорит мне:
WARNING: cache is out of date: C:/Program Files (x86)/Haskell Platform/2012.4.0.
0\lib\package.conf.d\package.cache
use 'ghc-pkg recache' to fix.
Я сделал recache и снова ввел команду "expose", но все еще не дал результатов.
Любые решения будут по достоинству оценены!
3 ответа
cabal: The following packages are likely to be broken b
haskell-platform-2012.4.0.0
Это очень плохой знак. Вы должны использовать только --force-reinstalls
если вы очень хорошо знаете, что делаете, а вы, как новый ученик, более или менее по определению не знаете. cabal
Вероятно, следует предупредить более строго.
Корень проблемы в том, что зависимости пакета указаны слишком строгими, чтобы он мог работать с ghc-7.4 или новее по умолчанию, так как они поставляются с time
версия пакета больше, чем разрешено craft3e
"s .cabal
файл. Правильным решением этой проблемы было бы ослабление зависимости, связанной с time
(должен был сделать автор, но до того, как исправленная версия была взломана, пользователь должен отредактировать .cabal
файл для разрешения time-1.4.*
если у него есть ghc >= 7.4
, так что пакет может быть собран без переустановки чего-либо и, таким образом, возможно, сломать установленные пакеты).
Переустановка time
, random
а также QuickCheck
скорее всего сломал несколько пакетов, запусти ghc-pkg check
из командной строки, чтобы получить оценку ущерба. Может просто ghc-pkg unregister
ИНГ time-1.2.0.5
и переустановка random
а также QuickCheck
бы исправить это, может быть, вам нужно переустановить больше, возможно, всю платформу.
После того, как сломанные пакеты будут так или иначе исправлены, перейдите к Craft3e-0.1.0.8
каталог, отредактируйте Craft3e.cabal
файл, изменяя строку
time >= 1.1 && < 1.3,
в build-depends
поле для
time >= 1.1 && < 1.5,
и беги cabal install --disable-documentation
там.
Could not find module `PicturesSVG'
it is a hidden module in the package `Craft3e-0.1.0.8'
Правильно. Пакет не предоставляет никаких модулей, поэтому все поставляемые с ним модули скрыты (не уверен, действительно ли это предусмотрено). Вы можете загружать их только из каталога, в котором они находятся, поскольку ghci предпочитает загружать исходные файлы из текущего каталога (дерева) для упаковки модулей. Если вы вызываете ghci из этого каталога, он должен загрузить файл. (Или вы также можете указать путь к каталогу при вызове ghci из другого каталога, ghci -ipath/to/Craft3e-0.1.0.8 PicturesSVG
.)
Craft3e
На самом деле, packege не предоставляет никаких модулей. Кажется, что файл cabal существует в основном для целей распространения и зависимости, а не для того, чтобы предоставить вам надлежащий интерфейс библиотеки, поэтому для загрузки любого из модулей вам всегда нужно явно открыть файл, в который он включен.
Я обновил пакет Craft3e, чтобы учесть новую версию Time. Извиняюсь за любые проблемы, вызванные.