Пакет Haskell установлен, но не найден

Установил диаграммы, вроде бы есть, но GHCi не находит. Я попытался добавить локальную песочницу в командную строку (-package-db), но безуспешно. Какие-либо предложения?

   C:\Users\guthrie>
   C:\Users\guthrie>cabal install diagrams
    Resolving dependencies...
    All the requested packages are already installed:
   diagrams-1.2
   Use --reinstall if you want to reinstall anyway.

Я нахожу это в:

  C:\Users\guthrie\.cabal-sandbox\i386-windows-ghc-7.6.3-packages.conf.d
        (diagrams-1.2, diagrams-contrib, -core, -lib, -svg) 

Но запуск: «cabal repl» или использование флага GHC(i) «-package-db=…» не находит его:

C:\Users\guthrie>cabal repl
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :m + Diagrams.Prelude

<no location info>:
    Could not find module `Diagrams.Prelude'
   It is not a module in the current program, or in any known package.
Prelude>

уточнить; игнорируя вызовы кабалы, напрямую используя GHC/i и программу chartsDemo.hs:

--  http://projects.haskell.org/diagrams/doc/quickstart.html
--
import Diagrams.Prelude
import Diagrams.Backend.SVG.CmdLine

main = mainWith (circle 1 :: Diagram B R2)

Дает:

C:\Users\guthrie\Desktop\xFer\Graphics>ghc --make diagramsDemo.hs

diagramsDemo.hs:7:8:
    Could not find module `Diagrams.Backend.SVG.CmdLine'
    Use -v to see a list of the files searched for.

C:\Users\guthrie\Desktop\xFer\Graphics>ghc --make diagramsDemo.hs -package-db=C:\Users\guthrie\.cabal-sandbox\i386-windows-ghc-7.6.3-packages.conf.d

diagramsDemo.hs:7:8:
    Could not find module `Diagrams.Backend.SVG.CmdLine'
    Use -v to see a list of the files searched for.

person guthrie    schedule 20.02.2015    source источник
comment
Если пакет diagrams не указан как зависимость в вашем файле .cabal, он не будет доступен из cabal repl (неправильная функция, IMO). Вы можете обойти это с помощью ghci -no-user-package-db -package-db=./.cabal-sandbox/i386-windows-ghc-7.6.3-packages.conf.d, для которого я сделал псевдоним в своей установке cygwin bash.   -  person bheklilr    schedule 20.02.2015
comment
Спасибо, но игнорируя подход cabal-repl, кажется, что ghci -package-db=... должно быть достаточно, чтобы ghc/i нашел его. У меня есть такое же приложение на соседней машине, и оно отлично работает, находит любые/все установленные пакеты. Итак, вопрос в том, почему аргумента -db не должно быть достаточно, чтобы найти его, когда это делает установка кабалы.   -  person guthrie    schedule 20.02.2015
comment
Когда вы используете cabal repl, он загружает зависимости, которые вы указали для своего проекта. Вы определенно можете установить другие пакеты в песочницу, но это не означает, что они доступны для импорта. Флаг -package-db добавляет дополнительную базу данных пакетов для сканирования, когда ghci просто ищет пакеты, но я также предпочитаю флаг -no-user-package-db, так как он предотвращает конфликты с моей системной установкой Cabal.   -  person bheklilr    schedule 20.02.2015


Ответы (1)


Как сказал bheklilr, если ghci запущен с cabal repl, он найдет только пакеты, указанные как зависимость в файле .cabal.

Однако вы можете запустить его с помощью cabal exec ghci, тогда он найдет все пакеты, установленные в песочнице.

То же самое верно и для вызова ghc (cabal build против cabal exec ghc), но обратите внимание, что если вы хотите передать флаги, вы должны использовать --, как в cabal exec ghc -- -O2 Main.hs. В качестве альтернативы вы можете использовать cabal exec bash и запустить ghci или ghc в новой оболочке.

cabal exec был добавлен в Cabal 1.20.

person ipsec    schedule 20.02.2015
comment
Хм, не уверен, что это действительно решает проблему - я запускаю ghc/ghci напрямую, а не через клику. и чтобы он находил пакеты в песочнице, я добавил параметр -package-db=./.cabal-sandbox.... У меня есть один файл pgm.hs и нет файла .cabal, и он мне не нужен. Эта же процедура работает на соседней машине, поэтому процедура кажется правильной, но на этой машине результат не работает. - person guthrie; 21.02.2015
comment
Да, должна быть возможность указать некоторые флаги для ghci, чтобы найти пакеты в песочнице. Я не знаю, почему это не работает в этом случае. Но мне проще использовать cabal exec, если вы используете песочницу Cabal. Это также более устойчиво к будущим изменениям в структуре песочницы. - person ipsec; 21.02.2015
comment
Спасибо - я не знал о cabal exec ghc, посмотрю на это подробнее, но мне кажется, что что-то не так с моими базами данных Cabal в целом. Я считаю, что 80% проблем, потерь времени и сбоев с Haskell связаны с кликами, и мне приходится просто периодически пересобирать и переустанавливать все библиотеки, и даже тогда много чего терпит неудачу (xxHaskell, gtk+, ...). - person guthrie; 21.02.2015