Вы используете Windows, OS X или какую-либо версию Linux?Вы используете платформу Haskell?Была ли у вас версия ghc
или cabal
раньше?Для дистрибутива Linux, конечно, могут возникнуть тонкости в вашем менеджере пакетов.(В частности, следы старого ghc
и старого каталога ~ / .ghc / могут быть источником проблем.)
Вот несколько элементарных мыслей о типе, который можно прочитать на #haskell при помощитакие проблемы.(Мое понимание, конечно, не совсем адекватно):
Главный вопрос, по-видимому, заключается в следующем: почему вас приглашают сделать то, что должно быть локальной установкой с sudo
?Глобальная установка (cabal install pony --global
), конечно, потребовала бы привилегий, если ghc и его библиотеки находятся в /usr/...
или другом защищенном месте, но в противном случае sudo
против не-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 Platform (этоМестоположение включает в себя некоторые особенности 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
и со.установив платформу Haskell с помощью бинарного установщика или вашего менеджера пакетов, что кажется хорошей идеей, я думаю, что было бы также хорошей идеей сохранить библиотеки платформы как нечто священное и убедиться, что вы никогда не устанавливаете что-либо глобально из Hackage;кроме всего прочего, это может привести к перезаписи библиотек Platform - хотя здесь это не кажется трудным: это было бы более очевидно, если бы это было.