Ответ 1
Используете ли вы Windows, OS X или некоторую версию Linux? Вы используете платформу Haskell? У вас была версия ghc
или cabal
раньше? Разумеется, для дистрибутива Linux могут возникнуть тонкости вашего менеджера пакетов. (Трассировки старого ghc
в частности, и старый каталог ~/.ghc/может быть источником проблем.)
Вот несколько элементарных мыслей о том, что один тип проходит через #haskell с такими проблемами. (Разумеется, мое понимание не вполне адекватно):
Главный вопрос, похоже, заключается в том, почему вас приглашали делать то, что должно быть локально установлено с помощью sudo
? Разумеется, для глобальной установки (cabal install pony --global
) необходимы привилегии, если ghc и ее библиотеки находятся в /usr/...
или в другом защищенном месте, но в противном случае sudo
vs non sudo
не зависит от места установки. То, что вы делаете с cabal install pony --user
(--user
по умолчанию, по умолчанию), не должно требовать полномочий суперпользователя. (Я иногда обнаружил в OS X, что запрашиваются привилегии, где нужно вызвать gcc
, но это обычно связано с любопытством относительно моей установки.) Но в любом случае sudo
не влияет на то, где cabal
помещает их: неявный --user
и явный --global
, и более конкретные заклинания для развития, сделайте это.
Если вы делаете ghc-pkg list
, например, он будет делить пакеты на разные места, в которые они зарегистрированы, в соответствии с двумя или более каталогами package.conf.d
, которые он суммирует. На моем ноутбуке на данный момент это
/Users/applicative/.ghc/x86_64-darwin-7.0.3/package.conf.d/...
для локальных вещей в ~/.cabal/lib/...
и защищенных
/Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/package.conf.d
для вещей, которые были установлены глобально с помощью установщика платформы Haskell (это место связано с некоторыми особенностями OS X, ghc
, ghci
и т.д. находятся где-то в лесу, но символически привязаны к /usr/bin
). Файлы conf для разных пакетов сообщают вам, где именно были установлены библиотеки. Так, например, о священной библиотеке base
,
$ cat base-4.3.1.0-f5c465200a37a65ca26c5c6c600f6c76.conf
говорит мне:
import-dirs:
/Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/base-4.3.1.0
library-dirs:
/Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/base-4.3.1.0
В любом случае, где ghc-pkg list
говорят, что ваши пакеты cabal install
-ed идут? В папке ~/.cabal
просмотрите файл config
. Если вы его не отредактировали, я думаю, что строки с комментариями и без комментариев, если они указывают предпочтение, указывают значения по умолчанию для установки с помощью --global
и --user
. В директории ~.ghc/
проверьте подкаталог myghcversion/package.conf.d
и посмотрите, есть ли что-нибудь, что должно быть таким же, как указано ghc-pkg
. (Вы можете изучить варианты ghc-pkg
в общем случае, например, ghc-pkg check
и ghc-pkg recache
, если вы этого не сделали. Возможно, вы установили что-то нечетным образом.)
Если вы установили ghc
и cabal
и co. устанавливая платформу Haskell с помощью двоичного установщика или менеджера пакетов, что кажется хорошей идеей, также я считаю хорошей идеей сохранить библиотеки платформы как нечто священное и убедиться, что вы никогда не устанавливаете ничего глобально из Hackage; среди прочего, это, вероятно, приведет к перезаписи библиотек платформ, хотя здесь это не кажется сложной: было бы более очевидно, если бы это было.